はじめに
Webサーバを建てたら必ず生レスポンスをチェックしたいよね。
HTTPとHTTPSでは方法が異なるのでその方法。
何度も聞かれるので書いておきます。
下記に記載のコードは、末尾にスペースと改行文字が入っています。コピーする際はご注意を。
目次
1.「httpの場合」はtelnetコマンド
2.「httpsの場合」はopensslコマンド
3.(番外)SSL証明書がVirtual Host名に対応しているか確認
4.(さらなる番外)SSL証明書のコモンネームと有効期限も確認
5.(もっと番外)SANSも列挙しちゃう
1.「httpの場合」はtelnetコマンド
※サーバ名が「www.example.jp」の場合
$ telnet www.example.jp 80 ↲
GET / HTTP/1.0 ↲
Host: www.example.jp ↲
↲
通常レンタルサーバなどはVirtual Host設定になっているので、Host: ドメイン名 は書く癖をつけたほうが良いです。
2.「httpsの場合」はopensslコマンド
※サーバ名が「www.example.jp」の場合
※サーバによっては-crlf(これはCR+LFを送る為のオプション)は不要です
$ openssl s_client -connect www.example.jp:443 -crlf -servername www.example.jp ↲
[ 省略 ]
GET / HTTP/1.0 ↲
Host: www.example.jp ↲
↲
証明書のコモンネームと同じであれば -servernameオプションは不要ですが、証明書に複数のドメイン名が登録されている場合は、必ず入力してください。
3.(番外)SSL証明書がVirtual Host名に対応しているか確認
2.の方法ではサーバ名がSSL証明書に対応しているかまではわからないので、そこまでチェックする。長いけど接続先のサーバ名と表示したいサーバ名の2箇所を変更するだけなので許してほしい。
「0」ならOK、それ以外ならNG
$ SV="www.example.jp"; openssl s_client -connect example.jp:443 -crlf -servername $SV < /dev/null 2> /dev/null | openssl x509 -text |grep $SV; echo $? ↲
[ 省略 ]
0
ワイルドカードの場合はマッチしないのでNGになります
4.(さらなる番外)SSL証明書のコモンネームと有効期限も確認
こっそりgoogle.comの証明書を覗いてみる
$ openssl s_client -connect google.com:443 -crlf < /dev/null 2> /dev/null | openssl x509 -noout -subject -dates ↲
subject= /CN=*.google.com
notBefore=Sep 12 08:16:59 2022 GMT
notAfter=Dec 5 08:16:58 2022 GMT
期間はGMTなので注意
5.(もっと番外)SANSも列挙しちゃう
$ SV="www.example.jp"; openssl s_client -connect example.jp:443 -crlf -servername $SV < /dev/null 2> /dev/null | openssl x509 -text |grep DNS: ↲
[ 省略 ] ※Subject Alternative Nameがあれば表示される
ごにょごにょヘラヘラひっそり雑談
最近、フリーランスが流行っているのか営業メールが多々来る。
是非仕事をやらせてくださいとのことなので、微妙なポートフォリオを確認後試しに発注してみる。
がしかし、納期前日に「すみません、できませんでした。お金は要りません」とか連絡が取れなくなるなど、考えられないことを平気でやってのける心臓の強さは誰にも負けないであろう人たちが多いんですよ。
頼む、やめてくれ
おわり
結局コマンドなんてのは常に使うものを暗記して「たまに使うものはあわよくば覚えてれば」くらいの感じでやらないと、どうやっても挫折する。だってこんな長いワンライナー1日置きくらいに打たないと暗記なんてできるわけない。
はっきり言って、100%覚えるのに3年かかるなら常に使うだろう20を半年で完全に暗記しどんな環境でもすぐに思い出せる状況にする、それ以外はなんとなくでも覚えてればそっちの方が即戦力になる。試験じゃないんだから辞書見てもチートシート見ても良いんだよ。
今生き残っているミドル級エンジニアはみんなそんなもんだと思うよ。