0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AmazonLinux2023に構築したWebサーバであえてTLSv1.0、1.1を有効化したときのメモ

Last updated at Posted at 2023-10-04

※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」に記載のアドレスをコピー
image.png

ブラウザでアクセスしてHTTP、HTTPSのそれぞれでIt worksが表示されることを確認
image.png
image.png

https~~でアクセスしたときのリクエストについて開発者ツールで確認
image.png
プロトコルバージョンについて「TLSv1.3」の記述を確認できました

SSLのテスト1回目(初期状態)

SSLのテストにはSSL Labsのテストツールを使用

↓「Click here to ignore~~~」をクリックして証明書のエラーを無視して検証できる
image.png

TLSv1.3がサポートされていること、Protocol Supportについて100点であることを確認
image.png

デフォルトの状態でTLSv1.0、1.1が無効化されていることを確認
image.png

このときのhttpdのssl.confは以下のような状態(抜粋)

/etc/httpd/conf.d/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を編集

/etc/httpd/conf.d/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が有効となっていないことを確認。。:pensive:
image.png

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を確認(抜粋)

/etc/pki/tls/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の中は以下の通り

/etc/crypto-policies/back-ends/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の記載を発見:flushed:
  • CipherStringという設定値の中でセキュリティレベルについて2に設定してそうな記述を発見

TLSv1.0、1.1についてopensslcnf.configを編集してテスト(失敗)

※この手順は誤りでしたが一応記載

TLSの最小プロトコルについてTLSv1.0を許容するような設定変更を実施

/etc/crypto-policies/back-ends/opensslcnf.config
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が有効となっていないことを確認。。:pensive::pensive:
image.png

TLS.MinProtocolの設定については元に戻しました。

openssl.cnfでセキュリティレベルを0に編集してテスト(成功)

/etc/pki/tls/openssl.cnf
[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が有効となったことを確認!:heart_eyes:
image.png

ちなみに推奨されていないTLSv1.0、1.1を有効化したことでページ上部のProtpcol Supportのスコアが下がったことも確認できました
image.png

ブラウザ(FireFox)で動作確認

TLSv1.0、1.1での通信を行うためにブラウザの設定を一時的に書き換える
image.png

TLSのバージョンについて最小と最大のそれぞれを1(TLSv1.0)とする
image.png

It worksの表示されるアドレスにアクセスしたときのリクエストについて開発者ツールで確認
image.png
プロトコルバージョンについて「TLSv1」の記述を確認できました

参考ページ

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?