WINAPI的本机SSL支持

时间:2017-10-09 21:06:23

标签: c++ ssl https winsock winsock2

我正在尝试使用Winsock API创建一个简单的IRC客户端,我想要添加SSL支持。目前我只是使用重叠的套接字I / O:

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。

1 个答案:

答案 0 :(得分:0)

我在几年前使用原生Windows API在标准TCP连接上做了一些SSL / TLS,但我不熟悉这个特定的"安全套接字扩展"。

我可以推荐使用SSPI。它不会自动将您的套接字转换为SSL,但可以非常轻松地根据请求生成SSL请求/响应/数据包。 查找InitializeSecurityContext了解更多信息。