【问题标题】:Boost SSL-Server fails with SSLv3-error [duplicate]Boost SSL-Server 因 SSLv3 错误而失败 [重复]
【发布时间】:2016-06-24 20:34:27
【问题描述】:

我正在用 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 警报握手失败”

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

"140030998197920:error:14082174:SSL 例程:SSL3_CHECK_CERT_AND_ALGORITHM:dh 密钥太小:s3_clnt.c:3329:"

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

【问题讨论】:

  • 只使用boost::asio::ssl::context::no_sslv2表示可以使用SSLv3记录层。您可能应该 OR-in boost::asio::ssl::context::no_sslv3boost::asio::ssl::context::single_dh_use 会破坏性能。可以考虑生成一个,用一个小时,再生成一个,用一个小时等等。DH太小的问题,见SSL operation failed with code 1: dh key too small

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


【解决方案1】:
context_.use_tmp_dh_file("CERTS/dh512.pem");
... dh key too small:s3_clnt.c:3329:"

您使用的 DH 密钥只有 512 位。此类密钥被认为太弱,并且较新版本的 TLS 库握手将失败。您最好使用 2048 位 DH 密钥,甚至更好地使用 ECDHE 密码。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-10
    • 2021-11-25
    • 2014-01-31
    • 2023-03-18
    • 2016-05-09
    • 2021-07-09
    • 1970-01-01
    相关资源
    最近更新 更多