2018年7月18日水曜日

Let's EncryptのCertificate Transparency対応

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を使って調べると以下のような出力になります。

これで、証明書の透過性を含んだ検証ができていることが判ります。
NEXT >> HTTP/2の動作確認

0 件のコメント :

コメントを投稿