WINAPI 的本机 SSL 支持
Native SSL Support for WINAPI
我正在尝试使用 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 握手。我发现旧的 Internet 帖子说 Winsock 中不支持 SSL。现在是 2017 年,95% 的网站使用 SSL。还是没有办法做到这一点?我找到了 Using Secure Socket Extensions,但它不是 SSL。
几年前,我已经 SSL/TLS 使用本机 windows API 通过标准 TCP 连接完成了一些工作,但我不熟悉这个特定的 "secure socket extension"。
我可以推荐使用 SSPI。它不会自动将您的套接字转换为 SSL,但可以很容易地用于根据请求生成 SSL request/response/data 数据包。
查找 InitializeSecurityContext
了解更多信息。
我正在尝试使用 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 握手。我发现旧的 Internet 帖子说 Winsock 中不支持 SSL。现在是 2017 年,95% 的网站使用 SSL。还是没有办法做到这一点?我找到了 Using Secure Socket Extensions,但它不是 SSL。
几年前,我已经 SSL/TLS 使用本机 windows API 通过标准 TCP 连接完成了一些工作,但我不熟悉这个特定的 "secure socket extension"。
我可以推荐使用 SSPI。它不会自动将您的套接字转换为 SSL,但可以很容易地用于根据请求生成 SSL request/response/data 数据包。
查找 InitializeSecurityContext
了解更多信息。