[ruby-list:50812] OpenSSLのセキュリティレベルの変更

From: Yasuhiro KIMURA <yasu@...>
Date: 2019-08-23 22:14:43 UTC
List: ruby-list #50812
木村と申します。
Net::HTTPとOpenSSLに関して質問させてください。

Net::HTTPを使って複数のWebサイトにアクセスするプログラムを、Ruby 2.6と
Debian Stretchの組み合わせで動かしていたのですが、最近このホストのOSを
Busterに更新したところ、一部のサイトへのNet::HTTP#startに対して
OpenSSL::SSL::SSLErrorが発生するようになりました。messageの値が
"SSL_connect returned=1 errno=0 state=error: dh key too small"だったの
で、これを元にして調べたところ、Busterのリリースノートの以下の記述に辿
り着きました。

https://www.debian.org/releases/buster/amd64/release-notes/ch-information.ja.html#openssl-defaults
----------------------------------------------------------------------
5.1.7. OpenSSL のデフォルトバージョンとセキュリティレベルが引き上げられました
様々なセキュリティ推奨に従い、標準の最低 TLS バージョンが TLSv1 から
TLSv1.2 に変更されました。

TLS 接続のセキュリティレベルについても同様で、レベル 1 からレベル 2 に
変更されています。これは 80 bit から 112 bit へのセキュリティレベル変
更と 2048 ビット長以上の RSA ないし DHE 鍵を必要とすることを意味し、
224 ビット長以上の ECC 鍵と SHA-2 ハッシュも要件となります。

システムレベルでの設定は /etc/ssl/openssl.cnf で変更できます。各アプリ
ケーションはそれぞれの設定項目でそれらを上書きも可能です。

標準の /etc/ssl/openssl.cnf には MinProtocol と CipherString がありま
す。CipherString にはセキュリティレベルも設定可能になりました。セキュ
リティレベルの詳細については SSL_CTX_set_security_level(3ssl) マニュア
ルページをご参照ください。プロトコルの最低要件バージョンについては
SSL_CONF_cmd(3ssl) に記載してあります。その他の情報は ciphers(1ssl) お
よび config(5ssl) に記載があります。

システムレベルの /etc/ssl/openssl.cnf による設定は次の設定で元の値に戻
すことができます:

        MinProtocol = None
        CipherString = DEFAULT
      
標準設定で問題が生じる場合は、当該する遠隔サイトへ連絡して頂くことを推
奨します。
----------------------------------------------------------------------

messageの内容から、セキュリティレベルの変更が関係していると考え、
/etc/ssl/openssl.cnfのCipherStringの設定を上述のように変更したところ、
問題のWebサイトに正常に接続できるようになりました。しかしながらこの方
法だと、このホストで動くOpenSSLを使う全てのプログラムのセキュリティレ
ベルに影響してしまうので、可能であれば、件のプログラムの中からセキュリ
ティレベルを変更する方法を、採りたいと考えています。

それで質問なのですが、Rubyのプログラムの中からOpenSSLのセキュリティレ
ベルを変更することは可能でしょうか。標準ライブラリのドキュメントを検索
して、OpenSSL::SSL::SSLContext#security_level=というメソッドがあるのは
判ったのですが、これとNet::HTTPをどう組み合わせたら良いのかがわかりま
せん。この辺の具体的な手順が解る方がいらっしゃいましたら、教えてくださ
い。

---
木村 康浩

In This Thread

Prev Next