我有Windows的C ++项目。 需要实现对现有的Winsock代码顶级既SSL客户端和服务器。
我试图与OpenSSL的,但似乎太乱。 我想有更好的/短/清洁/更快的方法implementeing这不是OpenSSL的..即时通讯感谢您的任何建议..
我有Windows的C ++项目。 需要实现对现有的Winsock代码顶级既SSL客户端和服务器。
我试图与OpenSSL的,但似乎太乱。 我想有更好的/短/清洁/更快的方法implementeing这不是OpenSSL的..即时通讯感谢您的任何建议..
您可以使用Windows内置的SSL东西 - SChannel中。 搜索谷歌FO“SChannel中的SSL”会给你足够的信息(尽管SChannel中的自身不良记录,不容易理解)。
在另一方面,OpenSSL的,一旦你学习了一些项目,使用OpenSSL的源代码是不是凌乱。
Acctually。经过与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>