2017-10-09 18 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을 찾으십시오.