SSL API的Winsock?(SSL api for winsock?)

2019-06-23 16:01发布

我有Windows的C ++项目。 需要实现对现有的Winsock代码顶级既SSL客户端和服务器。

我试图与OpenSSL的,但似乎太乱。 我想有更好的/短/清洁/更快的方法implementeing这不是OpenSSL的..即时通讯感谢您的任何建议..

Answer 1:

您可以使用Windows内置的SSL东西 - SChannel中。 搜索谷歌FO“SChannel中的SSL”会给你足够的信息(尽管SChannel中的自身不良记录,不容易理解)。

在另一方面,OpenSSL的,一旦你学习了一些项目,使用OpenSSL的源代码是不是凌乱。



Answer 2:

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>


文章来源: SSL api for winsock?
标签: ssl winsock