状況
昨日まで動いていた外部 API との連携が、今朝から次のエラーで失敗している。別のサーバーや手元の PC から試しても同じで、どの機械も時計は正しい。ブラウザで開いても期限切れの警告が出る。
対応として最も適切なものは?
$ curl https://api.example.com/v1/statuscurl: (60) SSL certificate problem: certificate has expired正答
- 連携の処理を
curl -kに変えて、証明書の検証を飛ばす - API の運営元に証明書の期限切れを伝え、更新してもらう
- 接続元のサーバーの CA 証明書の一覧を最新に入れ替える
- DNS のキャッシュを消して、別のサーバーに当たるのを待つ
解説
「certificate has expired」は、相手のサーバーが送ってきた証明書(または途中の証明書)の有効期限が切れていることを示す。どの接続元でも同じで時計も正しく、CA の一覧が新しいブラウザでも警告が出るなら、原因は相手側にあり、直せるのは証明書を持つ運営元だけ。openssl s_client で notAfter(有効期限)を確かめて伝えると話が早い。curl -k(1 番目)は検証を切るだけで、なりすましを見抜けなくなる危険な回避。CA の一覧(3 番目)は、接続元の古いルート証明書の期限が切れたときや「発行元が信頼できない」ときの対処で、ブラウザでも同じ警告が出る今回には効かない。DNS(4 番目)は接続先を決めるだけで、証明書の期限とは関係がない。
この問題を含む ネットワーク基礎 のテストを制限時間つきで解く
ネットワーク基礎クイズへ