【发布时间】:2014-05-20 16:17:32
【问题描述】:
我尝试将 PFS(完美前向保密)添加到我的客户端-服务器应用程序。
当我使用以下命令运行服务器时:
openssl s_server -key ./key.pem -cert ./cert.pem -accept 443 -cipher ECDHE-RSA-AES128-SHA -tls1_2
鉴于以下 ctx,我能够与我的客户建立联系:
SSL_CTX* initCTX() {
SSL_METHOD *method;
SSL_CTX *ctx;
SSL_library_init();
OpenSSL_add_all_algorithms();
SSL_load_error_strings();
method = TLSv1_2_client_method();
ctx = SSL_CTX_new(method);
if(ctx == NULL) {
ERR_print_errors_fp(stderr);
return NULL;
}
SSL_CTX_set_cipher_list(ctx, "ECDHE-RSA-AES128-SHA");
return ctx;
}
当我使用以下 ctx 运行我的服务器应用程序时:
SSL_CTX* init_ssl_ctx() {
SSL_METHOD const *method;
SSL_CTX *ctx;
SSL_library_init();
OpenSSL_add_all_algorithms();
SSL_load_error_strings();
method = TLSv1_2_server_method();
ctx = SSL_CTX_new(method);
if(ctx == NULL) {
ERR_print_errors_fp(stderr);
abort();
}
SSL_CTX_set_session_cache_mode(ctx, SSL_SESS_CACHE_OFF);
SSL_CTX_set_cipher_list(ctx, "ECDHE-RSA-AES128-SHA");
// ADDITIONAL CTX MODIFICATIONS TO ENABLE ECDHE
SSL_CTX_use_certificate_file(ctx, "./cert.pem", SSL_FILETYPE_PEM);
SSL_CTX_use_PrivateKey_file(ctx, "./key.pem", SSL_FILETYPE_PEM);
return ctx;
}
并尝试与客户端连接,然后我收到no shared cipher 错误。
已使用openssl genrsa 创建私钥。
我的问题是:如何修改 ctx 以添加 ECDHE 支持。我想我必须选择一条曲线,并且我可能需要为每个连接创建和交换密钥。
我还需要私钥文件吗?如果是的话——它是用来做什么的?
【问题讨论】: