(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【openssl】servernameオプションの有無による違い

スポンサーリンク

ポイント

ホスト名(ドメイン名)を指定して下記コマンドを発行するとSSL証明書に関する情報が取得できます。

$ openssl s_client -connect <domain>:443 -servername <domain>

一方、-servernameオプションを指定しないと欲しい情報が取得できない場合があります。
これはWebサーバ側に複数ドメインが設定されている場合に起こりえます。


以下、解説です。

バージョン
$ openssl version
OpenSSL 1.1.0k  28 May 2019

解説

opensslコマンドはs_clientを指定して実行することでSSLクライアントとして動作します。後続で「ホスト名:ポート番号」を指定すれば暗号化通信のための準備としてリクエストを送信し、そこでSSL証明書に関する情報が取得できます。

例えば

www.mtioutput.com

で送信してみます。

ちなみにブラウザで見ると以下の情報が確認できます。
f:id:mtiit:20190824210645p:plain

コマンドを発行すると

$ openssl s_client -connect www.mtioutput.com:443
CONNECTED(00000003)
depth=2 C = US, ST = New Jersey, L = Jersey City, O = The USERTRUST Network, CN = USERTrust RSA Certification Authority
verify return:1
depth=1 C = GB, ST = Greater Manchester, L = Salford, O = Sectigo Limited, CN = Sectigo RSA Domain Validation Secure Server CA
verify return:1
depth=0 OU = Domain Control Validated, OU = PositiveSSL Multi-Domain, CN = hatenablog.com
verify return:1
---
Certificate chain
 0 s:/OU=Domain Control Validated/OU=PositiveSSL Multi-Domain/CN=hatenablog.com
   i:/C=GB/ST=Greater Manchester/L=Salford/O=Sectigo Limited/CN=Sectigo RSA Domain Validation Secure Server CA
 1 s:/C=GB/ST=Greater Manchester/L=Salford/O=Sectigo Limited/CN=Sectigo RSA Domain Validation Secure Server CA
   i:/C=US/ST=New Jersey/L=Jersey City/O=The USERTRUST Network/CN=USERTrust RSA Certification Authority
 2 s:/C=US/ST=New Jersey/L=Jersey City/O=The USERTRUST Network/CN=USERTrust RSA Certification Authority
   i:/C=SE/O=AddTrust AB/OU=AddTrust External TTP Network/CN=AddTrust External CA Root
 3 s:/C=SE/O=AddTrust AB/OU=AddTrust External TTP Network/CN=AddTrust External CA Root
   i:/C=SE/O=AddTrust AB/OU=AddTrust External TTP Network/CN=AddTrust External CA Root
---
...

とツラツラ情報が出てきますがブラウザで確認したSSLのチェーン情報と相違しています。

そこで冒頭で述べた-servernameオプションです。

 openssl s_client -connect www.mtioutput.com:443 -servername www.mtioutput.com
CONNECTED(00000003)
depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
verify return:1
depth=0 CN = www.mtioutput.com
verify return:1
---
Certificate chain
 0 s:/CN=www.mtioutput.com
   i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
 1 s:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
   i:/O=Digital Signature Trust Co./CN=DST Root CA X3
---

ブラウザで確認した情報と一致しました。

このような事象が発生した理由に、上記ドメインはもともとはてなブログで用意されたドメインから変更した経緯があるからです。

確かにもともとのドメインである「hatenablog.com」の証明書を別ブログで確認すると以下のようになり、最初のオプションなしの実行結果と一致します。
f:id:mtiit:20190824211333p:plain

独自ドメインを追加したことにより、複数ドメインが設置されたWebサーバーになるため、正しい情報を取得したければバーチャルホスト名を指定する必要があります。

ちなみに前のホスト名を残すことは、前のドメインへの同記事へのアクセスも拾うためのありがたい仕組みです。エイリアスとして機能しています。

コマンドで情報を確認する場合はご注意ください。