※2023年にTLSv1.0、1.1について有効化することは推奨されてませんが、必要に迫られたときの調査と解決に至るまでのメモをまとめました
うまく行かなかった手順も含めて記載しています。
作成するEC2の情報
項目 | バージョン等 |
---|---|
AMI | ami-06373f281e72070d8 |
AMIの説明 | Amazon Linux 2023 AMI 2023.2.20231002.0 arm64 HVM kernel-6.1 |
アーキテクチャ | 64bit、Arm |
インスタンスタイプ | t4g.small(2023年12月31日まで無料トライアルなので) |
セキュリティグループ | 22,80,443番ポートのAnyWhereな接続を許可するインバウンドルールを新規作成 |
EBS | ルートボリュームのみ、8GB、gp3 |
その他、作成後のインスタンスに対してElasticIPをアタッチしました
作成したEC2の確認とWebサーバインストール
ssh接続後、まずopensslのバージョン確認
$ sudo su
# openssl version
OpenSSL 3.0.8 7 Feb 2023 (Library: OpenSSL 3.0.8 7 Feb 2023)
httpdとmod_sslインストール
# dnf install httpd mod_ssl
httpdのバージョン確認
# httpd -v
Server version: Apache/2.4.56 (Amazon Linux)
Server built: Mar 15 2023 00:00:00
httpdの自動起動設定&起動
# systemctl is-enabled httpd
disabled
# systemctl enable httpd
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
# systemctl start httpd
httpd起動後、EC2の管理画面上で「パブリック IPv4 DNS」に記載のアドレスをコピー
ブラウザでアクセスしてHTTP、HTTPSのそれぞれでIt worksが表示されることを確認
https~~でアクセスしたときのリクエストについて開発者ツールで確認
プロトコルバージョンについて「TLSv1.3」の記述を確認できました
SSLのテスト1回目(初期状態)
SSLのテストにはSSL Labsのテストツールを使用
↓「Click here to ignore~~~」をクリックして証明書のエラーを無視して検証できる
↓
TLSv1.3がサポートされていること、Protocol Supportについて100点であることを確認
デフォルトの状態でTLSv1.0、1.1が無効化されていることを確認
このときのhttpdのssl.confは以下のような状態(抜粋)
<VirtualHost _default_:443>
# SSL Engine Switch:
# Enable/Disable SSL for this virtual host.
SSLEngine on
# List the protocol versions which clients are allowed to connect with.
# The OpenSSL system profile is configured by default. See
# update-crypto-policies(8) for more details.
#SSLProtocol all -SSLv3
#SSLProxyProtocol all -SSLv3
# User agents such as web browsers are not configured for the user's
# own preference of either security or performance, therefore this
# must be the prerogative of the web server administrator who manages
# cpu load versus confidentiality, so enforce the server's cipher order.
SSLHonorCipherOrder on
# SSL Cipher Suite:
# List the ciphers that the client is permitted to negotiate.
# See the mod_ssl documentation for a complete list.
# The OpenSSL system profile is configured by default. See
# update-crypto-policies(8) for more details.
#SSLCipherSuite PROFILE=SYSTEM
</VirtualHost>
SSLProtocolがコメントアウトされていることを確認
TLSv1.0、1.1についてssl.confの中で有効化してテスト(失敗)
※この手順は誤りでしたが一応記載
ssl.confを編集
#SSLProtocol all -SSLv3
#SSLProxyProtocol all -SSLv3
+SSLProtocol all -SSLv3 +TLSv1 +TLSv1.1
#SSLCipherSuite PROFILE=SYSTEM
+SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
- SSLProtocol の設定値にTLSv1、TLSv1.1を明示
- SSLCipherSuite の設定になんかいろいろ許可する感じの設定を追記(よくわかってない)
httpdのシンタックスチェックと再起動
# httpd -t
Syntax OK
# systemctl restart httpd
SSL Labsのサイトで再チェックしたところTLSv1.0、1.1が有効となっていないことを確認。。
OpenSSLの設定を確認
openssl側の方で設定していそうなことや、セキュリティレベルを下げると良いという情報を発見。
参考サイト:https://github.com/openssl/openssl/issues/13299
opensslの設定ファイルの場所を確認
# openssl version -d
OPENSSLDIR: "/etc/pki/tls"
# ll /etc/pki/tls/
total 16
lrwxrwxrwx. 1 root root 49 Aug 15 18:22 cert.pem -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
drwxr-xr-x. 2 root root 75 Oct 4 07:01 certs
-rw-r--r--. 1 root root 412 Sep 6 22:25 ct_log_list.cnf
lrwxrwxrwx. 1 root root 50 Sep 6 22:29 fips_local.cnf -> /etc/crypto-policies/back-ends/openssl_fips.config
drwxr-xr-x. 2 root root 6 Sep 6 22:29 misc
-rw-r--r--. 1 root root 12163 Sep 6 22:25 openssl.cnf
drwxr-xr-x. 2 root root 27 Oct 4 07:01 private
openssl.cnfを確認(抜粋)
# Use this in order to automatically load providers.
openssl_conf = openssl_init
[openssl_init]
providers = provider_sect
# Load default TLS policy configuration
ssl_conf = ssl_module
[ ssl_module ]
system_default = crypto_policy
[ crypto_policy ]
.include = /etc/crypto-policies/back-ends/opensslcnf.config
上から順に
-
openssl_conf
の設定で openssl_init セクションを参照する - openssl_init セクションの
ssl_conf
の設定で ssl_module セクションを参照する - ssl_module セクションの
system_default
の設定で crypto_policy セクションを参照する - crypto_policy セクションの中で外部のファイルをインクルードする
という設定の流れを読めました
opensslcnf.configの中は以下の通り
CipherString = @SECLEVEL=2:kEECDH:kRSA:kEDH:kPSK:kDHEPSK:kECDHEPSK:kRSAPSK:-aDSS:-3DES:!DES:!RC4:!RC2:!IDEA:-SEED:!eNULL:!aNULL:!MD5:-SHA384:-CAMELLIA:-ARIA:-AESCCM8
Ciphersuites = TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:TLS_AES_128_CCM_SHA256
TLS.MinProtocol = TLSv1.2
TLS.MaxProtocol = TLSv1.3
DTLS.MinProtocol = DTLSv1.2
DTLS.MaxProtocol = DTLSv1.2
SignatureAlgorithms = ECDSA+SHA256:ECDSA+SHA384:ECDSA+SHA512:ed25519:ed448:rsa_pss_pss_sha256:rsa_pss_pss_sha384:rsa_pss_pss_sha512:rsa_pss_rsae_sha256:rsa_pss_rsae_sha384:rsa_pss_rsae_sha512:RSA+SHA256:RSA+SHA384:RSA+SHA512:ECDSA+SHA224:RSA+SHA224
[openssl_init]
alg_section = evp_properties
[evp_properties]
rh-allow-sha1-signatures = yes
-
TLS.MinProtocol
という設定値にTLSv1.2の記載を発見 -
CipherString
という設定値の中でセキュリティレベルについて2に設定してそうな記述を発見
TLSv1.0、1.1についてopensslcnf.configを編集してテスト(失敗)
※この手順は誤りでしたが一応記載
TLSの最小プロトコルについてTLSv1.0を許容するような設定変更を実施
Ciphersuites = TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:TLS_AES_128_CCM_SHA256
-TLS.MinProtocol = TLSv1.2
+TLS.MinProtocol = TLSv1
TLS.MaxProtocol = TLSv1.3
必要かわからないけどhttpdを再起動
# systemctl restart httpd
SSL Labsのサイトで再チェックしたところTLSv1.0、1.1が有効となっていないことを確認。。
TLS.MinProtocolの設定については元に戻しました。
openssl.cnfでセキュリティレベルを0に編集してテスト(成功)
[openssl_init]
-ssl_conf = ssl_module
+ssl_conf = ssl_legacy_sect
↓末尾に追記
+[ssl_legacy_sect]
+system_default = system_default_legacy_sect
+
+[system_default_legacy_sect]
+Options = UnsafeLegacyRenegotiation
+CipherString = DEFAULT@SECLEVEL=0
- TLSv1.2を最小とする設定がなされた opensslcnf.config を読み込むのをやめる
- ssl_legacy_sect セクション、system_default_legacy_sect セクションを新設(ファイル末尾に追記)
-
ssl_conf
の設定で ssl_module セクションを参照していた箇所について新設した ssl_legacy_sect セクションを参照するよう書き換え -
Options
の設定でUnsafeLegacyRenegotiationを設定 -
CipherString
の設定でセキュリティレベルについて0にする
というような内容。
必要かわからないけどhttpdを再起動
# systemctl restart httpd
SSL Labsのサイトで再チェックしたところTLSv1.0、1.1が有効となったことを確認!
ちなみに推奨されていないTLSv1.0、1.1を有効化したことでページ上部のProtpcol Supportのスコアが下がったことも確認できました
ブラウザ(FireFox)で動作確認
TLSv1.0、1.1での通信を行うためにブラウザの設定を一時的に書き換える
↓
TLSのバージョンについて最小と最大のそれぞれを1(TLSv1.0)とする
↓
It worksの表示されるアドレスにアクセスしたときのリクエストについて開発者ツールで確認
プロトコルバージョンについて「TLSv1」の記述を確認できました
参考ページ
-
OpenSSL 3.0 will continue to support TLS 1.0 and 1.1? · Issue #13299 · openssl/openssl
- そもそもOpenSSL3がTLSv1.0、1.1に対応しているのかを調査していたときに読んだissue
- セキュリティレベルについての言及もありました(よくわかってない)
-
TLS 1.0及び1.1の無効化とTLS 1.3の有効化について(10月9日土曜日実施予定) - 日経テレコン21からのお知らせ
- 動作確認に使用するブラウザ(FireFox)でTLSv1.0や1.1での通信が行うにあたっての設定変更の方法を調べたときに読んだページ
-
SSL Server Test (Powered by Qualys SSL Labs)
- 構築したWebサーバのTLSのサポート状況を確認するのに使用したツール