rabbit51

it's since Nov.30 2005
May.29 2014, transferred from broach

Let's Encrypt証明書の発行時刻と有効期間の時刻が1時間ズレている

2023-08-11 16:00:00 | DS-216J
Synology DS-216JでLet's Encryptの更新不具合」に「コメント(1時間のずれ)」が寄せられた。調べるのをすっかり忘れていた。

(1)状況
Synology DS-216JでLet's Encryptの更新不具合で更新処理した時刻と発行された証明書の有効期間の時刻(Not Before)で1時間の差がある。発行された証明書のSCT(Signed Certificate Timestamps)の時刻は、更新処理した時刻となっている。

(2)Signed Certificates Timestampを調べてみる
Certificate Transparency ~証明書の透明性とは何か〜(2016/4/22)」によるとこの時点でLet's Encryptは、Logサーバに登録はするけど証明書には埋め込まないと書かれている。

Engineering deep dive: Encoding of SCTs in certificates(Apr 4, 2018 )」でLet's Encryptは、SCTを証明書に埋め込むとアナウンス。

crt.shでlogを調べてみる

Synology DS-216JでLet's Encryptからサーバ証明書(Free)を得る」で最初に証明書を得たのが「2017/11/30」で「2018/2/3」の更新までLog登録は「PreCertificte」無しでSCTの埋め込みも無い。この時すでに証明書発行時刻とLog登録時刻に1時間の差が存在する。
2018/4のSCT埋込アナウンス後、「PreCertificte」のLog登録も行われ、証明書にSCTが埋め込まれるようになった。

(3)PreCertificateとCertificate
Synology DS-216JでLet's Encryptの更新不具合」で更新された後に発行された2019/5/31の証明書をLogから確認してみた。

PreCertificate(2019/5/31 09:51:29)

申請のあった時刻より1時間前から有効期限が始まる証明書を発行し、 CT Precertificate Poison( 1.3.6.1.4.1.11129.2.4.3 )でLogサーバに登録しSCTを得る。
Logサーバーに登録してSCTをえた時刻: 2019/05/31 09:51:30 GMT
証明書の有効開始時刻: 2019/05/31 08:51:29 GMT

Certificate(2019/5/31 09:51:30)

PreCertificateをLogサーバーに登録して得たSCTを証明書に埋込後CA署名し発行する。シリアル番号、有効期限などの情報変更なし。

LogIDは、Logサーバーの公開鍵(DER)をSHA256ハッシュした値。
certificate-transparency-community-site」にある「The list of all known and announced CT Logs」の「log_id」からLogサーバーの情報が得られる。
証明書内の「CT Precertificate SCTs」にある最初のサーバーのLog_ID「74:7E:DA:83:31:AD:33:10:91:21:9C:CE:25:4F:42:70:C2:BF:FD:5E:42:20:08:C6:37:35:79:E6:10:7B:CC:56」をbase64に変換する
$ cat <<EOF | xxd -r -p | openssl enc -base64
> 74:7E:DA:83:31:AD:33:10:91:21:9C:CE:25:4F:42:70:C2:BF:FD:5E:42:20:08:C6:37:35:79:E6:10:7B:CC:56
> EOF
dH7agzGtMxCRIZzOJU9CcMK//V5CIAjGNzV55hB7zFY=
「dH7agzGtMxCRIZzOJU9CcMK//V5CIAjGNzV55hB7zFY=」でリストを検索すると
{
          "description": "Cloudflare 'Nimbus2019' Log",
          "log_id": "dH7agzGtMxCRIZzOJU9CcMK//V5CIAjGNzV55hB7zFY=",
          "key": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEkZHz1v5r8a9LmXSMegYZAg4UW+Ug56GtNfJTDNFZuubEJYgWf4FcC5D+ZkYwttXTDSo4OkanG9b3AI4swIQ28g==",
          "url": "https://ct.cloudflare.com/logs/nimbus2019/",
          "mmd": 86400,
          "state": {
            "rejected": {
              "timestamp": "2020-02-07T00:00:00Z"
            }
          },
          "temporal_interval": {
            "start_inclusive": "2019-01-01T00:00:00Z",
            "end_exclusive": "2020-01-01T00:00:00Z"
          }
        }
が得られる。
「https://ct.cloudflare.com/logs/nimbus2019/」は、2020/2/7にクローズされ「Not Found」状態。

現在有効な証明書で確認してみる

SCTの最初のログサーバー
Key_ID=7A 32 8C 54 D8 B7 2D B6 20 EA 38 E0 52 1E E9 84 16 70 32 13 85 4D 3B D2 2B C1 3A 57 A3 52 EB 52

$ cat <<EOF | xxd -r -p | openssl enc -base64
> 7A 32 8C 54 D8 B7 2D B6 20 EA 38 E0 52 1E E9 84 16 70 32 13 85 4D 3B D2 2B C1 3A 57 A3 52 EB 52
> EOF
ejKMVNi3LbYg6jjgUh7phBZwMhOFTTvSK8E6V6NS61I=
-------------------
{
          "description": "Cloudflare 'Nimbus2023' Log",
          "log_id": "ejKMVNi3LbYg6jjgUh7phBZwMhOFTTvSK8E6V6NS61I=",
          "key": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEi/8tkhjLRp0SXrlZdTzNkTd6HqmcmXiDJz3fAdWLgOhjmv4mohvRhwXul9bgW0ODgRwC9UGAgH/vpGHPvIS1qA==",
          "url": "https://ct.cloudflare.com/logs/nimbus2023/",
          "mmd": 86400,
          "state": {
            "usable": {
              "timestamp": "2019-10-31T19:22:00Z"
            }
          },
          "temporal_interval": {
            "start_inclusive": "2023-01-01T00:00:00Z",
            "end_exclusive": "2024-01-01T00:00:00Z"
          }
        }

https://ct.cloudflare.com/logs/nimbus2023/


(3)まとめ
Let's EncryptがPreCertificateを生成する時、更新時刻より1時間前の時刻を有効期間の開始時刻として生成するため。

 

コメント (2)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする