我有windows c ++项目。 需要在现有的winsock代码之上实现ssl客户端和服务器。
我尝试使用openssl,但它似乎太乱了。我认为实现这个比openssl更好/更短/更清洁/更快的方式.. 我感谢任何建议..
答案 0 :(得分:3)
您可以使用Windows内置SSL功能 - SChannel。搜索谷歌“SChannel SSL”会给你提供大量的信息(尽管SChannel本身记录不清,不容易理解)。
另一方面,一旦你研究了一些使用OpenSSL的项目的源代码,OpenSSL就不会很乱。
答案 1 :(得分:1)
实际上..经过一段时间花在openssl黑客上我不会说它那凌乱:) 如果有人需要随时将ssl添加到现有的winsock代码中:
现有的winsock代码是这样的:
0: sockett.Listen etc....
1: sockett.Accept(client, .....
2: recv(client , ...)
3: send(client , .....)
如果你想在这里实现SSL,那就简而言之.. 删除第2行和第3行:)并添加:
SSL_library_init();
SSL_load_error_strings();
OpenSSL_add_all_algorithms();
SSL_CTX *tlsctx;
SSL *ssl;
tlsctx = SSL_CTX_new( SSLv23_method());
// search google : generate self signed certificate openssl
SSL_CTX_use_certificate_file(tlsctx, "ssl\\server1.crt" , SSL_FILETYPE_PEM);
SSL_CTX_use_PrivateKey_file(tlsctx, "ssl\\server1.key", SSL_FILETYPE_PEM);
ssl = SSL_new(tlsctx);
SSL_set_fd(ssl, client);
SSL_accept(ssl);
/* instaed recv SSL_read(ssl, ....*/
/* instaed send SSL_write(ssl, ....*/
/* not 100% sure Sleep and shutdown/free/close are entirely correct here but in my code works fine */
Sleep(3000);
SSL_shutdown(ssl);
SSL_free(ssl);
SSL_CTX_free(tlsctx);
shutdown(client, SD_BOTH);
Sleep(10);
closesocket(client);
进行测试: 在命令行中运行:
openssl s_client -host localhost -port <PORT>