Boost SSL-Server失败,产生SSLv3-error

Boost SSL-Server fails with SSLv3-error

本文关键字:产生 SSLv3-error 失败 SSL-Server Boost      更新时间:2023-10-16

我正在用c++编程一个"终端",客户端可以使用SSL来加密连接。我使用Boost::asio来处理套接字和SSL。

我像这样开始SSL-Context:

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

您可以看到,我将SSL-Version设置为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 alert handshake failure"

同时,我注意到客户端有一个奇怪的行:

"140030998197920:error:14082174:SSL例程:SSL3_CHECK_CERT_AND_ALGORITHM:dh key too small:s3_clnt.c:3329:"

这是什么意思?我在创建证书时是否犯了错误?我完全按照这个问题的答案所描述的那样做了

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

您使用的DH密钥只有512位。这样的密钥被认为太弱,并且在较新版本的TLS库中握手将失败。您最好使用2048位DH密钥,或者更好地使用ECDHE密码。

有关该问题的详细信息,请参见"Logjam Attack"。

相关文章: