2017-10-09 7 views
0

私は、SSLサポートを追加するWinsock APIを使用して、単純なIRCクライアントを作成しようとしています。現在、私はちょうどこのように重複したソケットI/Oを使用します。WINAPIのネイティブSSLサポート

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; 
} 

を今、私は理解して、SSLをサポートするために、私はWSAConnect()後にSSLハンドシェイクを行う必要があります。 WinsockにSSLサポートがないという古いインターネット記事がありました。今は2017年、ウェブサイトの95%がSSLで動作しています。これを行う方法はまだありますか?私はUsing Secure Socket Extensionsを見つけましたが、SSLではありません。

+0

WinSock自体はまだSSLをサポートしていません。しかし、Microsoftの[SChannel API](https://msdn.microsoft.com/en-us/library/windows/desktop/aa380123.aspx)では、既存のWinSockコードをSChannelベースのI/Oに使用できますが、暗号化されたSSLデータ。 [Schannelを使用した安全な接続の作成](https://msdn.microsoft.com/en-us/library/windows/desktop/aa374782.aspx)を参照してください。それ以外の場合は、サードパーティのSSLライブラリを使用します。 OpenSSLは非常に一般的で、既存のWinSockコードの上で(BIO APIを介して)使用できます。または、コードを書き直して、すべてのソケットI/Oを処理できるようにすることができます –

答えて

0

ネイティブWindows APIを使用して標準TCP接続よりも何年か前にSSL/TLSを使用しましたが、この特定の「セキュアなソケット拡張機能」に慣れていません。

SSPIの使用をお勧めします。ソケットをSSLに自動的に変換するのではなく、要求に応じてSSL要求/応答/データパケットを生成するのに非常に簡単に使用できます。 詳細については、InitializeSecurityContextをご覧ください。

関連する問題