きっかけはAWS
先日AWSさんより以下のお達しがありました。
背景:
2023 年 2 月 1 日から 2023 年 3 月 31 日までの間に、Amazon は Amazon が発行したすべてのパブリック証明書を、旧来の中間 CA, intermediate certificate authority (ICA) から、2022 年 10 月に導入された複数の中間 CA (ICA) /下位認証局のいずれかに移行します。
※証明書のピン留めによって既存の ICA 情報を明示的に利用しない限り、お客様による操作は必要ありません
参考:AWSドキュメント
https://docs.aws.amazon.com/ja_jp/acm/latest/userguide/troubleshooting-pinning.html
この「※証明書のピン留め」というのが証明書ピンニングというものだそうです。
参考:https://www.digicert.com/jp/blog/certificate-pinning-what-is-certificate-pinning
何がマズいの?
認証局を移行する => 違う証明書が必要になる = 今までの証明書が使えない = 通信断‼ = 悪即斬‼
AWSさんからの指令:証明書pinning をしていると影響がある可能性ありますので、確認いただけると助かります。
OK、完全に理解した。
証明書がピンニングされてるかどうか調べればいいんですね。
楽勝楽勝~~(フラグ)
とりあえずACMにあるパブリック証明書を確認してみよう。
あれ、設定ひと通り見たけどそれっぽいものが無い。。。
いや、証明書はどうやらロードバランサーに紐づいてるからそっちを見てみよう。
リスナーの「Default SSL Cert」に設定されてることは分かったが
分かったが?・・・分からん。
僕「Google先生~、証明書 ピンニング 確認方法~」
G先生「これとかこれとか、こんなんどう?、知らんけど」
ダメだ、解決できない(汗)
途中 teratail で同じ質問してる同志がいたが、あとから様子見に行くと削除されてた。。。
これは言い出しっぺ?のAWSさんに聞くしかない。
僕「AWSさん、たすけて」
AWSさん「参考:https://developer.mozilla.org/ja/docs/conflicting/Web/Security/Certificate_Transparency 」
HPKP の有効化
サイトでこの機能を有効化するには、サイトに HTTPS でアクセスされたとに、 HTTP の Public-Key-Pins (en-US) ヘッダーを返す必要があります。
Public-Key-Pins: pin-sha256="base64=="; max-age=expireTime [; includeSubDomains][; report-uri="reportURI"]
なるほど、このページはピンニングする側の確認方法ではないけれど、
ピンニングした証明書を使ってアクセスするためには、アクセスされるサーバー側にPublic-Key-Pins (en-US) ヘッダーを返す設定が必要なのね。
つまりサーバー側にその設定がされてるかどうか確認すればいいと。
よし、
開発チームに依頼しよう(ぶん投げ)
というわけで調査依頼を出して終了したのでした。
めでたしめでたし
そもそも
https://www.digicert.com/jp/blog/certificate-pinning-what-is-certificate-pinning
こちらでも言及されている通り、
Googleは、2011年(英語リンク)にChromeブラウザでメインWebサイトの発行認証局をピン留めしたことで、最初にピン留めを利用し始めた例の1つとなりました。
~
中略
~
安全かつ確実にピン留めを実装することの難しさから、サイトの保護よりもピン留めにより弊害が起こるケースが増えてきました。これらを含む多くの問題が見つかり、やがてGoogleとFirefoxはHPKP導入後わずか数年後にサポートをやめることになりました
2011年から数年後には非推奨となっており、プロジェクト担当のAWSさんも「おそらく大丈夫でしょう」とコメントされていました。
所感
HPKP自体は既に非推奨となってしまった技術で、これを知ったからと言って自分が開発するサービスに役立つかというと必ずしもそうではない確率が高い。
だがしかし、
インターネットの歴史の一端を垣間見れた気分で個人的には楽しかった。
(本音:お金貰って勉強できるの最高~)