Let's EncryptのCertificate Transparency対応
延期に延期を重ねていた、Let's Encryptへの証明書タイムスタンプ署名:Signed Certificate Timestamp(SCT)の埋め込みですが、2018年3月29日から開始いたしました。これによれり、ブラウザなどで、
証明書の透過性(Certificate Transparency)を確認できるようになります。
公式のcertbotよりもacme.shの方が、対応機種が広く、
開発言語に依存する部分も少ないため、ここでもacme.shを使った再取得の例を示します。
acme.shの詳しい使い方は、
をご覧ください。
[2018年6月5日追記]
Appleが、2018年10月15日以降、TLS証明書のCertificate Transparencyを
強制するとの声明を発表しました。
Embed SCT付き証明書の取得
取得と行っても、2018年3月29日以降、Let's Encryptから取得する証明書は、Embed SCTがもれなく、付いてきます。2018年以前に取得居ている方は、再取得すればOK。
acme.shの場合、以下のような感じでしょうか。
# cd ~/.acme.sh # ./acme.sh --renew --force -d www.example.com楕円曲線の証明書の再取得は以下のようになります。
# cd ~/.acme.sh # ./acme.sh --renew --force -d www.example.com --ecc続いて、実際にSCTが埋め込まれているか、OpenSSLから確認してみ
コマンドラインからEmbed SCTを確認する。
コマンドラインからOpenSSLを使ってEmbed SCTを確認します。
(※ OpenSSL 1.0.1以前のバージョンは、サポート期限が終了しています。
以下、acme.shで取得した、ECDSA(楕円曲線)を使った証明書のサンプルです。# /usr/local/bin/openssl x509 -in ~/.acme.sh/www.example.com_ecc/www.example.com.cer -text Certificate: Data: Version: 3 (0x2) Serial Number: (・・・省略・・・) Signature Algorithm: sha256WithRSAEncryption Issuer: C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3 Validity Not Before: Mar 29 XX:XX:XX 2018 GMT Not After : Jun 27 XX:XX:XX 2018 GMT Subject: CN = www.example.com Subject Public Key Info: Public Key Algorithm: id-ecPublicKey Public-Key: (256 bit) pub: (・・・省略・・・) ASN1 OID: prime256v1 NIST CURVE: P-256 X509v3 extensions: X509v3 Key Usage: critical Digital Signature X509v3 Extended Key Usage: TLS Web Server Authentication, TLS Web Client Authentication X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: (・・・省略・・・) X509v3 Authority Key Identifier: keyid:(・・・省略・・・) Authority Information Access: OCSP - URI:http://ocsp.int-x3.letsencrypt.org CA Issuers - URI:http://cert.int-x3.letsencrypt.org/ X509v3 Subject Alternative Name: DNS:www.example.com X509v3 Certificate Policies: Policy: 2.23.140.1.2.1 Policy: 1.3.6.1.4.1.44947.1.1.1 CPS: http://cps.letsencrypt.org User Notice: Explicit Text: This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/ CT Precertificate SCTs: Signed Certificate Timestamp: Version : v1 (0x0) Log ID : DB:74:AF:EE:CB:29:EC:B1:FE:CA:3E:71:6D:2C:E5:B9: AA:BB:36:F7:84:71:83:C7:5D:9D:4F:37:B6:1F:BF:64 Timestamp : Mar 29 23:22:39.417 2018 GMT Extensions: none Signature : ecdsa-with-SHA256 30:44:02:20:2B:F2:E4:D8:F4:83:17:33:F4:79:2B:B3: 5F:87:C0:AF:BE:6D:43:98:A2:0C:0B:72:BC:CE:64:C2: 56:F4:2F:2C:02:20:5C:D3:A0:92:7C:B2:A5:FA:E7:2F: 39:61:27:23:75:82:AF:1F:C2:53:DA:0E:04:CB:3B:12: 4D:94:4D:BA:09:26 Signed Certificate Timestamp: Version : v1 (0x0) Log ID : 29:3C:51:96:54:C8:39:65:BA:AA:50:FC:58:07:D4:B7: 6F:BF:58:7A:29:72:DC:A4:C3:0C:F4:E5:45:47:F4:78 Timestamp : Mar 29 23:22:39.451 2018 GMT Extensions: none Signature : ecdsa-with-SHA256 30:45:02:20:34:ED:FA:D8:9F:54:E5:9A:3E:ED:7B:62: 57:71:85:71:6F:FC:AC:D0:7D:25:BC:43:6B:8D:CF:BA: F4:28:28:B7:02:21:00:CE:57:28:AD:A9:49:1A:2E:81: 76:95:7C:16:35:F1:70:D0:00:E0:F6:E9:8E:70:70:8C: 09:3B:96:B2:F0:24:4F Signature Algorithm: sha256WithRSAEncryption (・・・省略・・・) -----BEGIN CERTIFICATE----- (・・・省略・・・) -----END CERTIFICATE-----緑の部分ようにCT Precertificate SCTs:や
Signed Certificate Timestamp:が追加されていれば問題ありません。
Cloudflare 'Nimbus2018' Logと、Google 'Icarus' logを利用しているようです。
(一つ目の、Log ID : DB:74から始まる方がCloudflare 'Nimbus2018' Logで、二つ目のLog ID : 29:3Cから始まる方が、Google 'Icarus' logです。)
ちなみに、RSAのサーバ証明書を取得しても、SCTの署名は、ECDSAで行われるようです。
apachctl -tで、設定ファイルの間違いが無いことを確認の上、下記のように
# /usr/local/apache2/bin/apachctl -t Syntax OK # /usr/local/apache2/bin/apachctl stop # /usr/local/apache2/bin/apachctl start再起動します。
chromeからEmbed SCTを確認する。
さきほど、OpenSSLのコマンドラインから確認した内容はChromeからも確認できます。リスタートしたサーバにChromeでアクセスして 、「ディベロッパーツール」を表示(WindowsだとCTRL+SHIFT+IのショートカットキーでもOK)して、「Security」タブを表示します。
そして、左側のMain Originにある、Let's Encryptから証明書を取得したサイトのドメイン名をクリックすると、右側にCertificate Transparencyが表示されればOKです。
また、QualysのSSL LabsのServer Testを使って調べると以下のような出力になります。
これで、証明書の透過性を含んだ検証ができていることが判ります。