Boost SSL-Server因SSLv3错误而失败

时间:2016-06-24 20:34:27

标签: c++ ssl boost openssl ssl-certificate

我正在用C ++编写一个“终端”,客户端可以使用SSL连接它来加密连接。我使用Boost::asio来处理套接字和SSL。

我正在启动SSL-Context,如下所示:

boost::asio::ssl::context context_(io_service_, boost::asio::ssl::context::tlsv1);

如您所见,我将SSL版本设置为TLSv1

这是上下文选项:

context_.set_options(boost::asio::ssl::context::default_workarounds
                        | boost::asio::ssl::context::no_sslv2
                        | boost::asio::ssl::context::single_dh_use);

    context_.use_certificate_chain_file("CERTS/server.crt");
    context_.use_private_key_file("CERTS/server.key", boost::asio::ssl::context::pem);
    context_.use_tmp_dh_file("CERTS/dh512.pem");

当我现在使用openssl s_client -connect localhost:8000 -tls1连接到我的服务器时,服务器端的握手失败并显示错误:

“sslv3提醒握手失败”

另外,我注意到客户端有一条奇怪的行:

“140030998197920:错误:14082174:SSL例程:SSL3_CHECK_CERT_AND_ALGORITHM:dh键太小:s3_clnt.c:3329:”

这是什么意思?我创建证书时是否犯了错误?我完全按照the answer to this question中描述的那样做了。

1 个答案:

答案 0 :(得分:3)

context_.use_tmp_dh_file("CERTS/dh512.pem");
... dh key too small:s3_clnt.c:3329:"

您使用的是仅512位的DH密钥。这些密钥被认为太弱,并且握手将因较新版本的TLS库而失败。你应该更好地使用2048位DH密钥,甚至更好地使用ECDHE密码。

有关该问题的详细信息,请参阅Logjam Attack