Вопрос по – SSL API для Winsock?

2

У меня есть проект Windows C ++. Необходимо реализовать как ssl-клиент, так и сервер поверх существующего кода winsock.

Я пытался с openssl, но это кажется слишком грязным. Я предполагаю, что есть более хороший / короткий / чище / более быстрый способ реализации этого, чем openssl .. Я благодарен за любые предложения ..

Ваш Ответ

2   ответа
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>
3

оиск в Google по «SChannel SSL» даст вам много информации (хотя сам SChannel плохо документирован и его нелегко понять).

С другой стороны, OpenSSL не запутается, когда вы изучите исходный код какого-либо проекта, который использует OpenSSL.

Спасибо ... хотя то, что я узнал о SChannel, казалось более сложным, чем openssl. GnuTLS выглядел довольно интересным, по крайней мере, имена методов и т. Д. Были более понятными (чем openssl, например). В моем проекте я должен реализовать SSL как на стороне c ++ / winsock, так и на стороне python. В Python все, что мне нужно было сделать, это добавить 1 строку кода: -------------- c = ssl.wrap_socket (newsocket, server_side = True, certfile = "servercert.pem", keyfile = "serverkey.pem", ssl_version = ssl.PROTOCOL_SSLv3) --------------- Это может звучать как глупый вопрос, но разве нет никакого способа сделать это таким же образом в c ++? user1283791
Heikkitoivonen.net / блог / 2008/10/14 / SSL-в-питон-26 является примером Python. Я просто добавил строку c = ssl.wrap_socket (newsocket, server_side = True, certfile = "servercert.pem", keyfile = "serverkey.pem", ssl_version = ssl.PROTOCOL_SSLv3) и использовал сокет c вместо newsocket. Кстати, CAsyncSocketEx, кажется, решение для клиента SSL. Но не нашли ничего, чтобы быстро реализовать SSL-сервер в c ++ / windows user1283791

Похожие вопросы