背景
-
macOSには既定で、OpenSSLがインストールされている。
-
qiita.comへのs_client接続で、TLS要件を確認してみる。
-
確かめたいTLSセキュリティ要件は以下の通り。
- ハンドシェイクで選択されたTLSバージョンがTLSv1.2以上であること。
- 弱いTLS/SSLバージョンでの接続が禁止されていること。
- ルート証明書が妥当であること。
- サーバ認証がルートCA,中間CAを含む多階層の認証で行われること。
- クライアント認証が行われていること。
- サーバ証明書の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確認/終了
$ openssl
OpenSSL> version
LibreSSL 2.2.7
OpenSSL> bye
TetsuonoMacBook-ea:~ thetsuthetsu$
例:qiita.comへのSSL接続
$ 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)
---
要件1. ハンドシェイクで選択されたTLSバージョン
- SSL-Session: Protocol: TLSv1.2
要件2. 弱いTLS/SSLバージョンでの接続不可
TLSv1.1での接続不可 (オプション -tls1_1) : OK
$ 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
TLSv1での接続不可 (オプション -tls1) : OK
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
SSLv以下での接続不可 : 不明
- openssl: -ssl3, -ssl2オプションの廃止
要件3. ルート証明書が正しいこと
- Certificate chainの証明書連鎖を確認する。
- チェーン0(s) : CNがサイト名に一致すること。qiita.comで正しい。
- チェーン3(s) : ルート証明書がStarfield Class 2 Certification Authorityから発行されている。
要件4. サーバ認証がルートCA,中間CAを含む多階層の認証で行われること。
- 以下の中間CA2つを含む4階層の認証が行われている。
- 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」 への接続例
$ 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: