Mac環境のOpenSSLでQiitaサイトのTLSセキュリティ要件を確認してみる

# 背景
* macOSには既定で、OpenSSLがインストールされている。
* qiita.comへのs_client接続で、TLS要件を確認してみる。
* 確かめたいTLSセキュリティ要件は以下の通り。
   1. ハンドシェイクで選択されたTLSバージョンがTLSv1.2以上であること。
   2. 弱いTLS/SSLバージョンでの接続が禁止されていること。
   1. ルート証明書が妥当であること。
   2. サーバ認証がルートCA,中間CAを含む多階層の認証で行われること。
   2. クライアント認証が行われていること。
   5. サーバ証明書のRevocationチェック（OCSPプロトコル：RFC6960, RFC6961）が行われること。
 
* Revocationチェックは、CRLの代替であるOCSP(https://ja.wikipedia.org/wiki/Online_Certificate_Status_Protocol
)応答で良い。

# 考察
* openssl s_clientで、httpsサイトのセキュリティ要件の大半は確認可能。
   * 余談だが、qiitaサイトではrevocationチェックがなく、msサイトではrevocationチェックが行われる。
* opensslでのssl3, ssl2, ssl1でのs_client接続は、もはや非対応となった。tls1より下位プロトコルでの接続禁止を確かめることはできない。
* 一般的なhttpsサイトではクライアント認証はないので、認証状況の確認には、別途、検証サイトを構築する必要がある。 （FTPSサイトなどが適当か？　後日検証予定）


# 環境
* macOS 10.13.4
* OpenSSL 2.2.7

# OpenSSL起動/version確認/終了
<pre>
$ openssl
OpenSSL> version
LibreSSL 2.2.7
OpenSSL> bye
TetsuonoMacBook-ea:~ thetsuthetsu$ 
</pre>

# 例：qiita.comへのSSL接続

<pre>

$ openssl s_client -connect qiita.com:https -CApath /etc/ssl/certs -status
depth=4 C = US, O = "Starfield Technologies, Inc.", OU = Starfield Class 2 Certification Authority
verify return:1
depth=3 C = US, ST = Arizona, L = Scottsdale, O = "Starfield Technologies, Inc.", CN = Starfield Services Root Certificate Authority - G2
verify return:1
depth=2 C = US, O = Amazon, CN = Amazon Root CA 1
verify return:1
depth=1 C = US, O = Amazon, OU = Server CA 1B, CN = Amazon
verify return:1
depth=0 CN = qiita.com
verify return:1
CONNECTED(00000005)
OCSP response: no response sent
---
Certificate chain
 0 s:/CN=qiita.com
   i:/C=US/O=Amazon/OU=Server CA 1B/CN=Amazon
 1 s:/C=US/O=Amazon/OU=Server CA 1B/CN=Amazon
   i:/C=US/O=Amazon/CN=Amazon Root CA 1
 2 s:/C=US/O=Amazon/CN=Amazon Root CA 1
   i:/C=US/ST=Arizona/L=Scottsdale/O=Starfield Technologies, Inc./CN=Starfield Services Root Certificate Authority - G2
 3 s:/C=US/ST=Arizona/L=Scottsdale/O=Starfield Technologies, Inc./CN=Starfield Services Root Certificate Authority - G2
   i:/C=US/O=Starfield Technologies, Inc./OU=Starfield Class 2 Certification Authority
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIFaDCCBFCgAwIBAgIQA8SkCl1LNmkM+7KLD3oRQTANBgkqhkiG9w0BAQsFADBG
MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRUwEwYDVQQLEwxTZXJ2ZXIg
Q0EgMUIxDzANBgNVBAMTBkFtYXpvbjAeFw0xODA0MjkwMDAwMDBaFw0xOTA1Mjkx
MjAwMDBaMBQxEjAQBgNVBAMTCXFpaXRhLmNvbTCCASIwDQYJKoZIhvcNAQEBBQAD
ggEPADCCAQoCggEBAKs+3UigdedoNqX/b62DHJIZ3jntxZwl5RA5KW8pOvNKZNVW
BttFsGhy2S+A+3BMDkPd5K+z6aMsh+is0ZJUWpvPX73/BBpVqzkCPUT2L8qhhIxj
bXJ1uWkfajCaiv788o8jLLNkoajSzDnuGEhoYuENw7JhGhkKypPCGU6W1UFWMzX5
nrcmlC0DCw0DilSYzDZOF61cTZHRXlcZTfs86knuctw8yGkq7uGuT3FXPvAVxx7X
aX4GTe2cjcqqzmTPNDhVznBRNexvNIdJk2KJ+l4DlFB3tPt/kjavNe3VVe5ebZFr
2movnCkaW6ARwFuhf6i2Lbn+KAukjhcpLhBdO6MCAwEAAaOCAoIwggJ+MB8GA1Ud
IwQYMBaAFFmkZgZSoHuVkjyjlAcnlnRb+T3QMB0GA1UdDgQWBBTaOt1gsM5Ct/iS
nZHW8khK2QsYXDAhBgNVHREEGjAYgglxaWl0YS5jb22CCyoucWlpdGEuY29tMA4G
A1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwOwYD
VR0fBDQwMjAwoC6gLIYqaHR0cDovL2NybC5zY2ExYi5hbWF6b250cnVzdC5jb20v
c2NhMWIuY3JsMCAGA1UdIAQZMBcwCwYJYIZIAYb9bAECMAgGBmeBDAECATB1Bggr
BgEFBQcBAQRpMGcwLQYIKwYBBQUHMAGGIWh0dHA6Ly9vY3NwLnNjYTFiLmFtYXpv
bnRydXN0LmNvbTA2BggrBgEFBQcwAoYqaHR0cDovL2NydC5zY2ExYi5hbWF6b250
cnVzdC5jb20vc2NhMWIuY3J0MAwGA1UdEwEB/wQCMAAwggEEBgorBgEEAdZ5AgQC
BIH1BIHyAPAAdgC72d+8H4pxtZOUI5eqkntHOFeVCqtS6BqQlmQ2jh7RhQAAAWMR
AzreAAAEAwBHMEUCIEbwxneZSpucK7eV8PqTMvBaoFg0e35GXA3hqrADS8vEAiEA
hT49YdyzmujNcx7nf4HN4QbdUzE8XGjY0S7GRirpHOQAdgCHdb/nWXz4jEOZX73z
bv9WjUdWNv9KtWDBtOr/XqCDDwAAAWMRAzrRAAAEAwBHMEUCIFVAVSOPORu+fEO3
BNUbEiZ8xjJSNWIv6PRtXLZCqU0HAiEA7UFA2EL5sjQFRD+At9j4BND0woi7geWr
X7wJJ1PPolQwDQYJKoZIhvcNAQELBQADggEBAHX4PVsOqFK1kiHKFx7f0TSB7blO
EAcZlTf5zpqCPLOLVmb98MKGBAgXHBBMiUXhioimhSdfuNMJWUw6G8ra0AF8e3bu
79I7Bm/NqugLfnKfc+SHKm9tCvo28aywjlVbsb36cmo2i9HpqAiZv6n2sNtYRUwR
HOAYwSt02O4Db4A4bX9cevCnTwKz8jSG0aPv+fthnaRej2C+FxDs071o7eQ3oUvZ
LtFgpd6hK5vjiFWEInSz6FPcJyfPXDSt00uOtJESeGwtJNEPEGyLZxKG1MiAXYPb
1wRRUqGj0TPHaNq8++1DCfVZ6vNNRyypWlmR+atX/5fj4bEGfaDSZLbLilg=
-----END CERTIFICATE-----
subject=/CN=qiita.com
issuer=/C=US/O=Amazon/OU=Server CA 1B/CN=Amazon
---
No client certificate CA names sent
---
SSL handshake has read 5487 bytes and written 444 bytes
---
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: E07CE4E3650FAB02607D6B5885FBAAC88D9713C4F62877DCACD15A89FBDFED85
    Session-ID-ctx: 
    Master-Key: 9CEF65FD19B1AD014E59A930AE6C60503B899E2B82585A1B4CCDDA03D90814E724EA53C14AD872744A7F226AF782CF8C
    TLS session ticket lifetime hint: 43200 (seconds)
    TLS session ticket:
    0000 - 91 23 7d bd f0 59 c5 3e-dc ea 5c bf 2f 98 11 35   .#}..Y.>..\./..5
    0010 - 07 f8 1b 6f 41 d0 ff ec-2c e2 22 13 35 2a e3 aa   ...oA...,.".5*..
    0020 - f5 d9 3b e3 e1 22 71 fc-e0 91 8e 24 a0 da d2 8f   ..;.."q....$....
    0030 - ba 7f 6f c6 24 00 45 b1-42 4d b2 c4 19 80 57 95   ..o.$.E.BM....W.
    0040 - 59 63 b8 1d 6d c2 94 c9-a4 8d 5a 01 61 b0 9a 18   Yc..m.....Z.a...
    0050 - 1e e6 04 63 f6 3a be 5f-7f a6 24 a6 ca 35 9d 07   ...c.:._..$..5..
    0060 - b3 21 b2 52 ed 38 16 8b-44 22 e9 54 b2 a2 86 d6   .!.R.8..D".T....
    0070 - 10 a7 0e 9d da 60 7c 1c-a0 bd 73 9e 35 49 6b 0c   .....`|...s.5Ik.
    0080 - 45 53 75 e1 13 84 90 05-f5 f3 59 6d 29 a6 5b dd   ESu.......Ym).[.
    0090 - 76 01 f2 82 82 c9 7c 7e-14 1e cc c0 99 31 3c 97   v.....|~.....1..
    00a0 - 66 c2 19 8a dc 0e e8 0f-69 b9 81 3f ca 53 74 92   f.......i..?.St.

    Start Time: 1536410060
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)
---

</pre>

## 要件1. ハンドシェイクで選択されたTLSバージョン
* SSL-Session: Protocol: TLSv1.2

## 要件2. 弱いTLS/SSLバージョンでの接続不可
### TLSv1.1での接続不可　（オプション -tls1_1) : OK
<pre>
$ openssl s_client -connect qiita.com:https -CApath /etc/ssl/certs -tls1_1 -status | head
write:errno=54
CONNECTED(00000005)
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 0 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
</pre>


### TLSv1での接続不可　（オプション -tls1) : OK
<pre>
TetsuonoMacBook-ea:~ thetsuthetsu$ openssl s_client -connect qiita.com:https -CApath /etc/ssl/certs -tls1 -status | head
write:errno=54
CONNECTED(00000005)
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 0 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
</pre>

### SSLv以下での接続不可　 : 不明
* openssl: -ssl3, -ssl2オプションの廃止

## 要件3. ルート証明書が正しいこと
* Certificate chainの証明書連鎖を確認する。
   * チェーン0(s) : CNがサイト名に一致すること。qiita.comで正しい。
   * チェーン3(s) : ルート証明書がStarfield Class 2 Certification Authorityから発行されている。
　　　　
## 要件4. サーバ認証がルートCA,中間CAを含む多階層の認証で行われること。
* 以下の中間CA２つを含む４階層の認証が行われている。
    * depth=1 C = US, O = Amazon, OU = Server CA 1B, CN = Amazon
    * depth=2 C = US, O = Amazon, CN = Amazon Root CA 1

## 要件5. クライアント認証の有無。
* 「No client certificate CA names sent」の出力通り、クライアント認証は行われていない。
* 一般的なHTTPSサイトなので当然。

## 要件6. サーバ認証時、証明書のRevocationチェックを行うこと。
* OCSP response: no response sent : 要件を満たさない。
* 参考） ocsp応答のあるサイト「www.office.com」　への接続例
<pre>
$ openssl s_client -connect www.office.com:https -CApath /etc/ssl/certs -status | head
depth=2 C = IE, O = Baltimore, OU = CyberTrust, CN = Baltimore CyberTrust Root
verify return:1
depth=1 C = US, ST = Washington, L = Redmond, O = Microsoft Corporation, OU = Microsoft IT, CN = Microsoft IT TLS CA 5
verify return:1
depth=0 CN = portal.office.com
verify return:1
CONNECTED(00000005)
OCSP response: 
======================================
OCSP Response Data:
    OCSP Response Status: successful (0x0)
    Response Type: Basic OCSP Response
    Version: 1 (0x0)
    Responder Id: 546D834E713BB4ED0E57829451B0BED494F9E833
    Produced At: Sep  6 12:59:18 2018 GMT
    Responses:
</pre>