在 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
,它起作用了。
我正在实施相互身份验证,其中服务器使用 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
,它起作用了。