2017-10-09 6 views
0

J'essaie de créer un client IRC simple, en utilisant l'API Winsock, à laquelle je souhaite ajouter le support SSL. Actuellement, je viens d'utiliser la prise chevauché E/S comme ceci:Prise en charge SSL natif pour WINAPI

SOCKET sock = WSASocketW(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0x02, 0x01); 

if (!sock) 
    return; 

struct sockaddr_in ircClient; 

memcpy(&ircClient.sin_addr, he->h_addr_list[0], he->h_length); 
ircClient.sin_family = AF_INET; 
ircClient.sin_port = wPort; 

WSAEVENT hDataEvent = WSA_INVALID_EVENT; 

if (WSAConnect(sock, (sockaddr*)&ircClient, sizeof(ircClient), 0, 0, 0, 0) > 0) { 
    closesocket(sock); 
    return; 
} 

if (wsWSAGetLastError() != 0) { 
    closesocket(sock); 
    return; 
} 

Maintenant, je comprends bien, pour le support SSL, je dois faire handshake SSL après WSAConnect(). J'ai trouvé de vieux messages Internet disant qu'il n'y a pas de support SSL dans Winsock. C'est maintenant l'année 2017, et 95% des sites Web fonctionnent avec SSL. Est-ce qu'il n'y a toujours aucun moyen de le faire? J'ai trouvé Using Secure Socket Extensions, mais ce n'est pas SSL.

+0

Cependant, l'API [SChannel API] de Microsoft (https://msdn.microsoft.com/en-us/library/windows/desktop/aa380123.aspx) le fait, et vous pouvez utiliser votre code WinSock existant pour les E/S de SChannel- données SSL cryptées. Voir [Création d'une connexion sécurisée à l'aide de Schannel] (https://msdn.microsoft.com/fr-fr/library/windows/desktop/aa374782.aspx). Sinon, utilisez une bibliothèque SSL tierce. OpenSSL est très commun, et il peut être utilisé en plus de votre code WinSock existant (via son API 'BIO'). Ou, vous pouvez réécrire votre code pour le laisser gérer toutes les E/S de socket pour vous –

Répondre

0

Il y a quelques années, je faisais des trucs SSL/TLS sur des connexions TCP standard en utilisant l'API windows native, mais je ne suis pas familier avec cette "extension de socket sécurisée" spécifique.

Je peux recommander l'utilisation de SSPI. Il ne transforme pas automatiquement votre socket en SSL, mais peut être utilisé assez facilement pour générer des requêtes/réponses/paquets de données SSL sur demande. Recherchez InitializeSecurityContext pour plus d'informations. WinSock lui-même ne prend pas encore en charge le protocole SSL, true.