状況
DNS を切り替える前に、新サーバー 203.0.113.20 の HTTPS を確かめたい。新サーバーには www.example.com の証明書を入れたが、IP を直接指定した curl は次のエラーになった。
証明書の検証も含めて新サーバーを確かめるコマンドは?
$ curl https://203.0.113.20/curl: (60) SSL: no alternative certificate subject name matches target host name '203.0.113.20'正答
curl --resolve www.example.com:443:203.0.113.20 https://www.example.com/curl -k --resolve www.example.com:443:203.0.113.20 https://www.example.com/curl -H 'Host: www.example.com' https://203.0.113.20/curl http://203.0.113.20:443/
解説
証明書は名前に対して発行されるので、IP で接続すると「名前が一致しない」で失敗する。`--resolve 名前:ポート:IP を使うと、URL の名前(www.example.com)はそのままで、接続先だけを 203.0.113.20 にできる。SNI も名前の検証も www.example.com で行われ、本番と同じ条件で確かめられる。-H 'Host: ...'(3 番目)は HTTP のヘッダーを変えるだけで、TLS の SNI(IP の URL では送られない)と証明書の名前の検証は URL の 203.0.113.20 で決まるので同じエラーになる。2 番目は接続先こそ正しいが、-k` で検証を飛ばすため、証明書を確認したことにならない。443 番に HTTP で話しかける(4 番目)のは誤り。
この問題を含む ネットワーク基礎 のテストを制限時間つきで解く
ネットワーク基礎クイズへ