してみるテストロゴ
Apache 2.4系でHTTP/2サーバを構築してみるテスト。

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以前のバージョンは、サポート期限が終了しています。OpenSSL 1.0.2以降を利用してください。

以下、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の動作確認

©Copyrights 2015-2018, non-standard programmer

このサイトは、あくまでも私の個人的体験を、綴ったものです。 軽く参考程度にご利用ください。