opensslでhttpsの疎通テストをしてハマった話し

仕事でhttpsの疎通テストをする必要があり、opensslコマンドでハマったときの備忘録です。

opensslコマンドを実行する

下記のようにコマンドを実行しました。


$ openssl s_client -tls1_2 -connect www.hogehoge.com:443
 :
 :
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
---
</cod></pre>
<p>エラーになる・・・。ダメってことなのか?って思いましたが、動作要件は満たしているんでおかしいなと思いcurlコマンドで試してみたところ</p>
<pre><code class="language-bash">
$ curl -s -v --tlsv1.2 https://www.hogehoge.com 1> /dev/null
 :
HTTP/1.1 200 OK
 :

大丈夫でした。

長い時間悩みようやく閃きました。SNIだ。

SNIとは?

SNI(Server Name Indication)とは1台のサーバで複数のSSL証明書を利用することできるSSL/TLSの拡張仕様です。
詳しいことはこちらをご覧ください。

https://jp.globalsign.com/blog/2015/server_name_indication.html

オプションを追加する

opensslコマンドに-servernameオプションを追加し再度実行します。


$ openssl s_client -tls1_2 -connect www.hogehoge.com:443 -servername www.hogehoge.com
 :
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES128-GCM-SHA256
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol  : TLSv1.2
Cipher    : ECDHE-RSA-AES128-GCM-SHA256
Session-ID: A74A5DEF0B0E5B38D6C3CBD1C11FB593E0D11FB8658B551F405ED82095FF22A0
Session-ID-ctx:
Master-Key: 03D23A3EFB1714B747843CC5A616B2123E4F797CD737F5D2C8AE8A293FE54330713FA050EC357D7CCF78FEE293A9047F
TLS session ticket lifetime hint: 10800 (seconds)
TLS session ticket:
0000 - 0a 93 37 4e e1 02 c1 14-6e 2f 52 c8 8f 17 14 47   ..7N....n/R....G
0010 - 71 79 b6 dc cd af 9d 96-bd a0 f5 1e 4e d8 73 78   qy..........N.sx
0020 - a4 03 d5 56 25 01 91 c3-96 76 5e 54 35 19 b7 7c   ...V%....v^T5..|
0030 - 8b 4a ed 70 ce 32 24 3c-07 af 7e ac 72 d4 20 ff   .J.p.2$<..~.r. .
0040 - 8c 6d 9d 76 0e fc 55 59-14 c0 7b 7e a2 83 38 22   .m.v..UY..{~..8"
0050 - 22 68 05 b7 0a 4d 8d 8a-de c6 dc c2 e5 8a dd 51   "h...M.........Q
0060 - 5b 45 4e 67 61 6c a0 fb-3b d0 a5 3e 3c 8f f9 ea   [ENgal..;..><...
0070 - 53 c6 0b 8a ba 16 2e 69-f1 c0 d0 c8 1f 45 04 8d   S......i.....E..
0080 - 02 2f e8 86 93 56 59 66-51 c9 b5 ed c6 65 7d 93   ./...VYfQ....e}.
0090 - 33 c4 3f cf 8e 20 49 e1-8a 96 a1 73 99 49 45 c3   3.?.. I....s.IE.
00a0 - 17 5f 77 1b bf 62 04 64-3c 24 aa 5a 58 40 24 28   ._w..b.d<$.ZX@$(
Start Time: 1528098781
Timeout   : 300 (sec)
Verify return code: 0 (ok)
---

今度は大丈夫でした。オプションで指定しないといけないんでつい忘れちゃいますね(デフォルトにして欲しい・・・)。ではまた。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

ABOUTこの記事をかいた人

Yusuke Ito

20代後半プログラミング未経験から転職し、現在はWEBエンジニアとして働いています。 バックエンドが本職ですが、1人でサービスを立ち上げるためフロントエンドも勉強中です。 最近はDAppsやNEMの開発に夢中です。