在 boost::asio 中对 SSL/TLS 使用特定密码

Using specific cipher for SSL/TLS in boost::asio

我正在实施相互身份验证,其中服务器使用 nodejs 而客户端使用 boost::asio。我试图通过输入特定的密码和特定的 TLS 版本来解决问题。我可以强制它使用特定的 tls 版本,但我如何强制 boost::asio 使用特定的密码。这是我的实现代码:

context_ptr ctx = websocketpp::lib::make_shared<boost::asio::ssl::context>(websocketpp::lib::asio::ssl::context::tlsv12_client);
try {
        ctx->set_options(boost::asio::ssl::context::default_workarounds |
                         boost::asio::ssl::context::no_sslv2 |
                         boost::asio::ssl::context::single_dh_use);
        ctx->set_verify_mode(boost::asio::ssl::context::verify_peer | 
        boost::asio::ssl::context::verify_fail_if_no_peer_cert);
        ctx->load_verify_file("ca_server.pem");
    } catch (std::exception& e) {
        std::cout << "Exception " << e.what() << std::endl;
    }
SSL_set_cipher_list(ctx->native_handle(), "TLS_DHE_RSA_WITH_AES_256_GCM_SHA384");
ctx->use_certificate_file("client.pem",
        boost::asio::ssl::context::file_format::pem);
ctx->use_private_key_file("client.key", 
        boost::asio::ssl::context::file_format::pem);

如您所见,我想使用 TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 密码作为身份验证。谁能告诉我应该怎么做才能强制它使用特定密码?

注意:我的 SSL_set_cipher_list(ctx->native_handle(), "TLS_DHE_RSA_WITH_AES_256_GCM_SHA384"); 实现是错误的。那么我怎样才能使它起作用呢?

在看到@ottomeister 的评论后,我意识到我在使用 SSL 连接时正在处理 SSL 上下文。所以我使用 SSL_CTX_set_cipher_list 而不是 SSL_set_cipher_list,它起作用了。