Let's Encryptのプロファイル選択機能
Let's EncryptにはProfile機能があり、異なる仕様のサーバ証明書を発行できます。
説明ページにある通り、現在classicとtlsserverの2種類のプロファイルが選択できます。(shortlivedプロファイルもありますが、まだ一般公開されておらず利用できません)
プロファイルを選択すると何が変わるのか
何も選択しなければclassicプロファイルが選択されます。通常Let's Encryptの証明書といえばこの証明書です。tlsserverを選択すると、新しい仕様の証明書が発行されます。
「新しい仕様」とはCA/Browserフォーラムのベースライン要求の推奨設定や、WebPKIコミュニティにおけるトレンドを反映したものです。現代のTLSサーバでは使われていなかったり、冗長なフィールドが取り除かれています。その分証明書のサイズが小さくなり、TLSハンドシェイクの高速化が期待できます。
一方で古いクライアントや古いサーバ(特にアプライアンス)は、新しいプロファイルで発行した証明書が利用できない可能性があるので、注意が必要です。
現時点でまだ利用できないshortlivedプロファイルは、その名の通り有効期限が短い証明書を発行するプロファイルで、有効期間は6日+16時間(通常のLet's Encrypt証明書は90日)です。2025年中の一般公開が予定されています。2025年7月8日時点で発行できるのはStaging環境のみです。詳細は公式ブログのAnnouncing Six Day and IP Address Certificate Options in 2025を参照してください。
プロファイルごとの証明書仕様比較
仕様の違いを表にすると以下の通りです。
| classic | tlsserver | shortlived | |
|---|---|---|---|
| ステータス | 標準 | 選択可能 | 未公開 |
| 有効期間 | 90日 | 90日 | 160時間(6日+16時間) |
| ドメイン認証の制限時間 | 7日間 | 1時間 | 1時間 |
| ドメイン認証結果の有効期間 | 30日間 | 7時間 | 7時間 |
| 証明書発行完了までの制限時間 | 7日間 | 8時間 | 8時間 |
| Common Name | あり | なし | なし |
| Key Encipherment Key Usage | あり | なし | なし |
| Extended Key UsageのTLS Client Auth | あり | なし | なし |
| Subject Key ID | あり | なし | なし |
| 失効情報 | CRL | CRL | CRL |
| SANの上限 | 100 | 25 | 25 |
| 利用可能な名前 | FQDN | FQDN | FQDN,IPアドレス |
tlsserverとshortlivedはclassicと比べて、証明書を発行するまでのタイムリミットが軒並み厳しくなっています。DNSレコードの追加を手動でやっていた場合、新プロファイルでは設定が難しくなる可能性があります。
削除されているのはサーバ証明書ではあまり聞きなれないフィールドが中心ですが、Common Nameの削除は意外に思われるかもしれません。実はCommon Nameはもう使われておらず、RFC 9525 "Service Identity in TLS"でサービスの識別に使ってはいけない(MUST NOT)とされています。
これは機能が多く、値の解釈の揺らぎがないSubject Alternative Names extension(SAN)が実装されたことにより、役割が重複してしまったためです。
Extended Key UsageのTLS Client Authenticationは本来サーバ証明書には不要な値なので、2026年2月11日以降classicプロファイルでも含まれなくなります。
実際に発行する
プロファイル選択に対応したACMEクライアントが必要ですが、Certbot, Lego, dehydratedは対応していることを確認しています。
今回はLegoを利用します。Legoは1バイナリで証明書の作成更新から認証用DNSレコードの取り扱いまでやってくれるので、導入しやすいツールです。LegoはデフォルトでECDSA P-256形式の証明書を発行します。RSA形式の証明書は明示的な指定が必要なので注意してください。
Legoでtlsserverプロファイルを使うには、このように--profile tlsserverを付与します。ここではDNSのゾーン管理はRoute53で行っているものとしています。
lego --accept-tos -d www.example.com -m mail@example.com --dns route53 -k rsa2048 run --profile tlsserver
今回は実際に使うことを意図していないので、Let's EncryptのStaging環境で発行します。LegoでStaging環境を使うためには--server=https://acme-staging-v02.api.letsencrypt.org/directoryを付与します。
lego --accept-tos --server=https://acme-staging-v02.api.letsencrypt.org/directory -d www.example.com -m mail@example.com --dns route53 -k rsa2048 run --profile tlsserver
発行した証明書の中身を確認します。
まずはclassicプロファイル(デフォルト)から。
$ openssl x509 -text -noout -in classic.example.com.crt Certificate: Data: Version: 3 (0x2) Serial Number: 2c:eb:(snip) Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, O=(STAGING) Let's Encrypt, CN=(STAGING) Wannabe Watercress R11 Validity Not Before: Jun 23 04:26:52 2025 GMT Not After : Sep 21 04:26:51 2025 GMT Subject: CN=classic.example.com Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:99:ad:25:86:85:68:a6:f3:21:66:b3:a5:32:ed: (snip) Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: critical Digital Signature, Key Encipherment X509v3 Extended Key Usage: TLS Web Server Authentication, TLS Web Client Authentication X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: AA:66:(snip) X509v3 Authority Key Identifier: 13:CB:(snip) Authority Information Access: CA Issuers - URI:http://stg-r11.i.lencr.org/ X509v3 Subject Alternative Name: DNS:classic.example.com X509v3 Certificate Policies: Policy: 2.23.140.1.2.1 X509v3 CRL Distribution Points: Full Name: URI:http://stg-r11.c.lencr.org/53.crl CT Precertificate SCTs: Signed Certificate Timestamp: Version : v1 (0x0) Log ID : 28:76:(snip) Timestamp : Jun 23 05:25:22.254 2025 GMT Extensions: none Signature : ecdsa-with-SHA256 30:46:(snip) Signed Certificate Timestamp: Version : v1 (0x0) Log ID : C0:5D:(snip) Timestamp : Jun 23 05:25:22.786 2025 GMT Extensions: 00:00:05:00:3A:88:22:EC Signature : ecdsa-with-SHA256 30:45:(snip) Signature Algorithm: sha256WithRSAEncryption Signature Value: 16:08:8f:08:93:6d:c9:6a:8e:4b:46:d9:46:e6:29:25:b4:db: (snip)
次にtlsserverプロファイルの証明書。
$ openssl x509 -text -noout -in tlsserver.example.com.crt Certificate: Data: Version: 3 (0x2) Serial Number: 2c:f1:18:27:36:6e:e5:48:88:f4:ef:bc:1b:ab:ec:00:68:9c Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, O=(STAGING) Let's Encrypt, CN=(STAGING) Wannabe Watercress R11 Validity Not Before: Jun 23 04:30:43 2025 GMT Not After : Sep 21 04:30:42 2025 GMT Subject: Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:bb:9e:24:7d:92:74:5a:0b:37:a2:d2:26:4f:69: (snip) Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: critical Digital Signature X509v3 Extended Key Usage: TLS Web Server Authentication X509v3 Basic Constraints: critical CA:FALSE X509v3 Authority Key Identifier: 13:CB:(snip) Authority Information Access: CA Issuers - URI:http://stg-r11.i.lencr.org/ X509v3 Subject Alternative Name: critical DNS:tlsserver.example.com X509v3 Certificate Policies: Policy: 2.23.140.1.2.1 X509v3 CRL Distribution Points: Full Name: URI:http://stg-r11.c.lencr.org/29.crl CT Precertificate SCTs: Signed Certificate Timestamp: Version : v1 (0x0) Log ID : 28:(snip) Timestamp : Jun 23 05:29:13.654 2025 GMT Extensions: none Signature : ecdsa-with-SHA256 30:44:(snip) Signed Certificate Timestamp: Version : v1 (0x0) Log ID : B0:CC:(snip) Timestamp : Jun 23 05:29:13.621 2025 GMT Extensions: none Signature : ecdsa-with-SHA256 30:45:(snip) Signature Algorithm: sha256WithRSAEncryption Signature Value: 5c:b3:f6:da:e7:74:d3:9b:07:d2:e6:a1:22:13:a2:9f:3a:e5: (snip)
このようにtlsserverプロファイルだとCommon Nameなどが削られているため、証明書の中身も少し短くなります。
実際に証明書のファイル長がどれくらい短くなっているのか調べるため、上記とは異なる27bytesのFQDNで証明書を発行し、ファイルサイズを比較しました。全てLet's EncryptのStaging環境で発行しています。 比較のためRSA 2048とECDSA P-256それぞれの形式で発行します。
| アルゴリズム | classic | tlsserver | 差分 |
|---|---|---|---|
| RSA 2048 | 3791 | 3677 | -114 |
| ECDSA P-256 | 3027 | 2933 | -94 |
アルゴリズムによって異なりますが、100bytes程度小さくなっています。割合にして3%程度の削減効果です。大規模システムでなければ性能にはほとんど影響がないレベルですが、将来的に移行が必要になることを想定して先んじて切り替えていくのも良いでしょう。
担当:松浦