2016-06-24 2 views
0

クライアントがSSLを使用して接続を暗号化するためにC++で「ターミナル」をプログラミングしています。私はBoost::asioを使用してソケットとSSLを処理します。私はこのようなSSL-コンテキスト始めていますSSLv3エラーでブーストSSLサーバが失敗する

:あなたが見ることができるように

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

を、私はTLSv1にSSL-バージョンを設定します。

これは、コンテキスト・オプションは次のとおりです。

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"); 

私は今conntect 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に記載されているようにしました。

+0

boost :: asio :: ssl :: context :: no_sslv2のみを使用すると、SSLv3レコード層を使用できることを意味します。あなたはおそらく 'boost :: asio :: ssl :: context :: no_sslv3'でORをとるべきです。 'boost :: asio :: ssl :: context :: single_dh_use'はパフォーマンスを低下させます。 DHを小さすぎる問題については、[コード1でSSL操作ができませんでした:dhキーが小さすぎます](http://)を参照してください。 stackoverflow.com/a/30706878/608639)。 – jww

答えて

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を参照してください。

関連する問題