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 ---
エラーになる・・・。ダメってことなのか?って思いましたが、動作要件は満たしているんでおかしいなと思いcurlコマンドで試してみたところ
$ 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の拡張仕様です。 詳しいことはこちらをご覧ください。
オプションを追加する
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) ---
今度は大丈夫でした。オプションで指定しないといけないんでつい忘れちゃいますね(デフォルトにして欲しい・・・)。ではまた。