証明書入れ替えでAkamaiにまつわるトラブルに遭遇した話

Webサービスに関わるインフラエンジニアをやっていると証明書を入れ替える時がしばしばあると思う.今日は業務中の証明書入れ替えで起こったトラブルについて書いていく.CDNサービスの1つであるAkamaiと関係のあるトラブルなので,Akamaiを使っている方は参考になるかもしれない.

構成

弊社はメディアサービスを運用しており,ページの表示速度向上のために,画像等の静的なファイルについてはAkamaiを利用してキャッシュを効かせている.まずは必要な部分のシステムと画像が表示されるまでのフローを図示する.

f:id:a-mochan:20191121234104p:plain
画像が表示されるまでのフロー

弊社では画像を置くためのサーバ(以降オリジンサーバ)を用意しており,それらの画像はAkamaiが管理するサーバ(以降エッジサーバ)にキャッシュとして存在している.画像が表示されるまでのフローは以下の通り.

  1. ユーザがWebサーバからコンテンツを取得
  2. そのコンテンツで表示される画像はエッジサーバから取得
  3. エッジサーバは画像がキャッシュに存在するならそれをユーザへ返し,存在しなければエッジサーバがオリジンサーバから画像を取得しユーザへ画像を返す

なお,社内のDNS上でimage.example.jpexample.jp.edgesuite.netへCNAMEとして向けられており,画像へのアクセスはhttps://image.example.jp/path/to/image.jpgのような形でアクセスすると思っていただけたらよい.

起きた現象

今回,証明書の入れ替えを行うのはWebサーバとオリジンサーバである.いつものように証明書を入れ替えて,入れ替え対象となるドメインを確認した.ざっと確認してOKだったので,今日も無事に完了かと思ったその時,現場の開発エンジニアから以下のようなスクショが飛んできた.

f:id:a-mochan:20191121220647p:plain
ブラウザのエラー画面

エッジサーバからan error occurred while processing your requestが返されるらしい.詳しく聞くとどうやらエッジサーバにキャッシュとして存在するhttps://image.example.jp/path/to/image.jpgのようなアクセスだと画像が表示されるが,エッジサーバにキャッシュとして存在しないhttps://image.example.jp/path/to/image.jpg?hogehogeのようなアクセスだと画像が表示されないらしい.オリジンサーバのアクセスログを見てもそれらしいアクセスはない.おそらくエッジサーバからオリジンサーバへのアクセスが怪しい.報告してくれたエンジニアの話を聞くとタイミング的に証明書を変えた時間からおかしくなったようなので,試しに元の証明書に戻したところ無事画像が表示された.

原因調査

すぐにAkamaiのサポートに問い合わせた.するとサポートから,「エッジサーバがオリジンサーバとSSL通信を実施する際に,Origin SSL Certificate Verificationの設定と一致しない証明書が使用されたため,エラーが発生した可能性がある」と返答がきた.これはAkamaiが信頼しているルート認証局がチェーンに入っていない証明書をオリジンサーバで使うとエラーになるということを表している.どうやらAkamaiの管理コンソールで,Akamaiが信頼するルート認証局を設定する項目があるらしく探してみるとそれらしき項目を発見.

f:id:a-mochan:20191121222159p:plain
Akamaiが信頼するルート認証局を設定する画面

信頼するルート認証局として1つ登録してある.ここで我々インフラは原因に気づいた.今回発行した証明書のルート認証局が変わっていたのである.つまり変更した新しいルート認証局Akamaiの信頼するルート認証局一覧になかったのでエッジサーバからオリジンサーバへのアクセスができなくなったというわけだ.

対応

原因がわかったので,Akamaiの信頼するルート認証局一覧に新しい認証局を追加しようかと考えた.しかし,頻繁に起こるわけではないにしてもルート認証局が変わるたびにAkamaiの設定をいじるのはあまりしたくない.そう思いながら設定項目を見ていると,我々が設定していた方法は認証局をカスタムで設定する方法であって,Akamaiが管理するルート認証局セットを使う方法もあることに気が付いた.仮にまた証明書のルート認証局が変わった場合,Akamaiの信頼するルート認証局に新しいルート認証局が登録されているかを確認しなければならないのはどちらの設定方法でも言えることだ.しかし,Akamaiが管理するルート認証局セットを使う方法では以下で図示しているように数多くのルート認証局が登録してあり,今後の運用で今回のような実害が発生しにくいのはこの方法だと思ったのでこちらを使うことにした.ただここで1つ罠なのが,以下の図で示すように,我々が新たに使うルート認証局の共通名がブランクになっていてわかりにくい点だ.この場合はフィンガープリントの方で判断するしかないので注意する.

f:id:a-mochan:20191121222342p:plain
Akamaiが管理するルート認証局一覧

Akamaiの信頼するルート認証局の設定を変更し,既存のWebサービスに影響が出ていないことを確かめ,改めて証明書を入れ替えると,エッジサーバにない画像はオリジンサーバから返却され正常に表示された.めでたしめでたし.

まとめ

  • 証明書入れ替えにより,Akamaiのエッジサーバからオリジンサーバへのアクセスがエラーになった問題を解決した
  • 原因はAkamaiが信頼しているルート認証局がチェーンに入っていない証明書をオリジンサーバで使ったこと
  • 今回のように証明書の更新でルート認証局が変わる可能性を考慮すると,Akamaiでの信頼するルート認証局の設定はAkamaiが管理するルート認証局セットを使う方法がベターかなと思う