c++ - Boost SSL-Server 因 SSLv3 错误而失败

标签 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:error:14082174:SSL routines:SSL3_CHECK_CERT_AND_ALGORITHM:dh key too small:s3_clnt.c:3329:”

这是什么意思?我创建证书时是否犯了错误?我完全按照 the answer to this question 中的描述进行了操作.

最佳答案

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

您正在使用只有 512 位的 DH key 。此类 key 被认为太弱,并且握手将因更新版本的 TLS 库而失败。您应该更好地使用 2048 位 DH key ,或者更好地使用带有 ECDHE 的密码。

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

关于c++ - Boost SSL-Server 因 SSLv3 错误而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38021693/

相关文章:

c++ - DX11 丢失实例缓冲区数据

apache - 如何强制 apache 将 www SSL 请求重定向到非 www SSL

ssl - .cert 与 .cacert 之间的区别 (X.509)

OSX 10.6.6 上的 c++ boost 1_46_1。不链接

c++ - boost 单元测试 visual studio 未显示在控制台中

c++ - Netbeans IDE 7.2.1 : How to add the c++ boost library

c++ - 无法将 'classname::glutKeyboard' 从类型 'void (classname::)(unsigned char, int, int)' 转换为类型 'void (*)(unsigned char, int, int)'

c++ - 使用 STL 迭代器的模板构造器

c++ - 没有类型名的模板参数

php - Symfony 使用 Swift Mailer 和 o2switch 发送电子邮件