Я пишу SSL-сервер и клиент для связи. У меня есть следующий код для сервераНет сертификатов сервера и «нет общего шифрования» при подключении клиентов
SSL_CTX* InitServerCTX(void)
{
SSL_METHOD *method;
SSL_CTX *ctx;
SSL_library_init();
OpenSSL_add_all_algorithms(); /* load & register all cryptos, etc. */
SSL_load_error_strings();
ERR_load_crypto_strings();
OpenSSL_add_all_ciphers();
ctx = SSL_CTX_new(SSLv23_server_method()); /* Create new context */
if (ctx == NULL)
{
ERR_print_errors_fp(stderr);
abort();
}
SSL_CTX_set_cipher_list(ctx, "HIGH:MEDIUM:!eNULL:!aNULL:!RC4");
return ctx; }
После этого код принять это
int client = accept(server, (sockaddr*)&addr, &len); /* accept connection as usual */
printf("Connection: %s:%d\n",
inet_ntoa(addr.sin_addr), ntohs(addr.sin_port));
ssl = SSL_new(ctx); /* get new SSL state with context */
SSL_set_fd(ssl, client);
int ret = SSL_accept(ssl);
А вот код клиента
SSL_CTX* InitCTX(void)
{
SSL_METHOD *method;
SSL_CTX *ctx;
SSL_library_init();
OpenSSL_add_all_algorithms(); /* Load cryptos, et.al. */
SSL_load_error_strings(); /* Bring in and register error messages */
ctx = SSL_CTX_new(SSLv23_client_method()); /* Create new context */
if (ctx == NULL)
{
ERR_print_errors_fp(stderr);
abort();
}
SSL_CTX_set_cipher_list(ctx, "HIGH:MEDIUM:!eNULL:!aNULL:!RC4");
return ctx;
}
Для подключения это
ssl = SSL_new(ctx); /* create new SSL connection state */
SSL_set_fd(ssl, server); /* attach the socket descriptor */
int ret = SSL_connect(ssl) ;
Я не использую сертификаты или ключи.
Когда я пытаюсь соединиться с использованием этого подхода, я не получаю ошибку общих шифров на стороне сервера. Я думаю, что это проблема конфигурации в отношении шифров. Может кто-то, пожалуйста, укажите мне правильное направление.
Благодаря
Как правило, в этом *** варианте использования (без сервера auth) вы используете Анонимный Диффи-Хеллман (ADH) или EC Anonymous Diffie-Hellman (ECADH). Вы должны удалить *** '! ANULL' *** из списка наборов шифров на * и * клиенте и сервере. Некоторые пользовательские агенты, такие как браузеры, не принимают его. Связанная тема - [оппортунистическое шифрование] (http://en.wikipedia.org/wiki/opportunistic_encryption). Он используется в случаях использования, таких как MTA и почтовые серверы, и *** может быть *** применим в вашем случае использования. – jww