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>

エラーになる・・・。ダメってことなのか?って思いましたが、動作要件は満たしているんでおかしいなと思いcurlコマンドで試してみたところ

```bash
$ curl -s -v --tlsv1.2 https://www.hogehoge.com 1&gt; /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$&lt;..~.r. .
0040 - 8c 6d 9d 76 0e fc 55 59-14 c0 7b 7e a2 83 38 22 .m.v..UY..{~..8&#34;
0050 - 22 68 05 b7 0a 4d 8d 8a-de c6 dc c2 e5 8a dd 51 &#34;h...M.........Q
0060 - 5b 45 4e 67 61 6c a0 fb-3b d0 a5 3e 3c 8f f9 ea [ENgal..;..&gt;&lt;...
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&lt;$.ZX@$(
Start Time: 1528098781
Timeout : 300 (sec)
Verify return code: 0 (ok)
---

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