This question already has an answer here:
SSL operation failed with code 1: dh key too small
(1个答案)
3年前关闭。
我正在用C ++编写一个“终端”,客户端可以使用SSL将其连接到该终端以加密连接。我使用
我正在像这样启动SSL上下文:
如您所见,我将SSL版本设置为
这是上下文选项:
现在,当我使用
“ sslv3警报握手失败”
另外,我注意到客户端有一条奇怪的线:
“ 140030998197920:错误:14082174:SSL例程:SSL3_CHECK_CERT_AND_ALGORITHM:dh密钥太小:s3_clnt.c:3329:”
这是什么意思?创建证书时我是否犯了一个错误?我完全按照the answer to this question中的描述进行了操作。
您正在使用仅512位的DH密钥。此类密钥被认为太弱,并且握手将在较新版本的TLS库中失败。您最好改用2048位DH密钥,甚至最好对ECDHE使用密码。
有关该问题的更多详细信息,请参见Logjam Attack。
(1个答案)
3年前关闭。
我正在用C ++编写一个“终端”,客户端可以使用SSL将其连接到该终端以加密连接。我使用
Boost::asio
处理套接字和SSL。我正在像这样启动SSL上下文:
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中的描述进行了操作。
最佳答案
context_.use_tmp_dh_file("CERTS/dh512.pem");
... dh key too small:s3_clnt.c:3329:"
您正在使用仅512位的DH密钥。此类密钥被认为太弱,并且握手将在较新版本的TLS库中失败。您最好改用2048位DH密钥,甚至最好对ECDHE使用密码。
有关该问题的更多详细信息,请参见Logjam Attack。
关于c++ - Boost SSL服务器因SSLv3错误而失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38021693/
10-09 08:31