LetsEncryptで証明書取得時に--apache
オプションを付与すると、自動的にSSL設定ファイル(options-ssl-apache.conf
)が/etc/letsencrypt
下に作成されます。
この設定で許可されているSSLプロトコルはTLS1.2
のみで、暗号化スイートは以下のとおりです。(2020年8月頃の話です)
- ECDHE-ECDSA-AES128-GCM-SHA256
- ECDHE-RSA-AES128-GCM-SHA256
- ECDHE-ECDSA-AES256-GCM-SHA384
- ECDHE-RSA-AES256-GCM-SHA384
- ECDHE-ECDSA-CHACHA20-POLY1305
- ECDHE-RSA-CHACHA20-POLY1305
- DHE-RSA-AES128-GCM-SHA256
- DHE-RSA-AES256-GCM-SHA384
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
発生した問題
本証明書が設置されているサーバ上のAPIをあるクライアント端末から実行しようとしたらエラーになりました。
エラー内容は以下です。
SSL/TLS のセキュリティで保護されているチャネルを作成できませんでした
この端末はやや古いOS(Windows 2012)で、アプリケーションは.NET Framework4.6上に構築されています。
項目 | 値 |
---|---|
OS | Windows 2012 |
アプリタイプ | .netアプリ |
.NET Frameworkバージョン | 4.6 |
上記エラーでぐぐると、暗号化プロトコルを以下のように明示的に指定すれば良い。という情報が多数見つかりますが本件では違いました。
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
【参考/上記問題について記載された記事】WPFアプリ(.NET frameworkアプリ)でhttps(TLS1.1/TLS1.2)通信をする
解決策
暗号化スイート(SSLCipherSuite
)に以下の2つを追加で許可することで解決しました。
- ECDHE-RSA-AES128-SHA256
- ECDHE-RSA-AES256-SHA384
この暗号化スイーツを追加してもサイトのSSL/TLS評価はAのままでした。
SSL Server Test (Powered by Qualys SSL Labs)