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

时间:2018-04-27 08:39:17

标签: c++ ssl boost boost-asio

我正在实现一个相互身份验证,其中服务器在客户端使用boost::asio时使用nodejs。我试图通过使用特定的密码和特定的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");的实施是错误的。那么我怎样才能做到这一点呢?

1 个答案:

答案 0 :(得分:0)

在看到@ottomeister的评论后,我意识到我在使用SSL连接时正在处理SSL上下文。我使用了SSL_CTX_set_cipher_list而不是SSL_set_cipher_list,而且效果很好。