概要
ALBのデフォルト証明書更新後にSNI(Server Name Indication)に残る、有効期限が少しの間で切れてしまう古い証明書は削除するべきかどうかについて。
また、削除が必要となるケースについて、実際に手を動かしながら確認していく記事になります。
結論
結論としては、以下の通りなので古い証明書は残ったままの状態でも問題はないです。
・証明書更新後、新しいリクエストは更新された証明書を使用します。
・証明書置き換え後、新しいリクエストは新しい証明書を使用します。
https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/application/create-https-listener.html
検証
実際に古い証明書を削除が必要となるケースについて確認していきます。
1. OpenSSLで自己証明書を二つ発行します。
・作成日時 8/27 16時頃
・有効期限が1日の証明書
・有効期限が1年の証明書
2. ALBに「有効期限が1日の証明書」をデフォルト証明書として設定します。
3. 「有効期限が1日の証明書」が設定されていることを確認します。
・webページ上の証明書ビュー
・コマンド結果
masaki1:~ masaki$ date 2023年 8月27日 日曜日 16時32分03秒 JST masaki1:~ masaki$ masaki1:~ masaki$ openssl s_client -connect sample.com:443 < /dev/null 2> /dev/null | openssl x509 -noout -subject -dates subject= /C=JP/ST=Tokyo/L=Minato-ku/CN=sample.com notBefore=Aug 27 07:10:17 2023 GMT notAfter=Aug 28 07:10:17 2023 GMT
4. 「有効期限が1年の証明書」をデフォルト証明書として置き換えます。
次に、「有効期限が1年の証明書」に置き換わって設定されていることを確認しますが、、
5. 上記のデフォルト証明書更新作業の後に以下の現象が発生した場合
・webページ上の証明書ビュー(キャッシュ消去後に再アクセスしてもwebページ上の証明書ビューでは、証明書の更新が適用されていない)
・コマンド結果(コマンド上では更新が適用されている)
masaki1:~ masaki$ date 2023年 8月27日 日曜日 16時56分38秒 JST masaki1:~ masaki$ masaki1:~ masaki$ openssl s_client -connect sample.com:443 /dev/null | openssl x509 -noout -subject -dates subject= /C=JP/ST=Tokyo/L=Minato-ku/O=Sample/CN=sample.com notBefore=Aug 21 15:48:57 2023 GMT notAfter=Aug 20 15:48:57 2024 GMT
解決方法
上記原因の発生原因は不明ですが、対策方法は下記記載の通りなので状況に応じて対応すると良いと思います。
a. すぐにwebページ上の証明書ビューでも更新後の証明書の使用を確認したい場合
・ALB上のSNIに残っている古い証明書を削除することで、更新後の証明書確認がwebページ上の証明書ビューにて確認できます。
・webページ上の証明書ビュー
・コマンド結果
masaki1:~ masaki$ date 2023年 8月27日 日曜日 17時13分01秒 JST masaki1:~ masaki$ masaki1:~ masaki$ openssl s_client -connect sample.com:443 /dev/null | openssl x509 -noout -subject -dates subject= /C=JP/ST=Tokyo/L=Minato-ku/O=Sample/CN=sample.com notBefore=Aug 21 15:48:57 2023 GMT notAfter=Aug 20 15:48:57 2024 GMT
b. 上記以外の場合
・ALB上のSNIに残っている古い証明書の有効期限が切れるのを待つことで、更新後の証明書確認がwebページ上の証明書ビューにて確認できます。
・webページ上の証明書ビュー
・コマンド結果
masaki1:~ masaki$ date 2023年 8月28日 月曜日 19時59分38秒 JST masaki1:~ masaki$ masaki1:~ masaki$ openssl s_client -connect masaki-test-alb.entry-training06.clp-staging.jp:443 /dev/null | openssl x509 -noout -subject -dates subject= /C=JP/ST=Tokyo/L=Minato-ku/O=Sample/CN=sample.com notBefore=Aug 21 15:48:57 2023 GMT notAfter=Aug 20 15:48:57 2024 GMT