#73101active
x/crypto/acme: support for acme profiles
新規提案
要約
AIによる要約であり、誤りを含む場合があります。
概要
x/crypto/acme パッケージに ACME プロファイル機能のサポートを追加する提案。ACME プロファイルとは、証明書の検証プロセスや証明書の内容(有効期間など)を指定するための仕組みで、Let's Encrypt がすでに本番環境で提供している機能。
ステータス変更
(新規) → active
2026年1月に Let's Encrypt が短期間証明書(約6日)および IP アドレス向け TLS 証明書を一般提供開始したことを受け、@rolandshoemaker が「実装を検討する時機が来た」と判断。2026年6月24日の週次 Proposal Review Meeting で active ステータスに移行し、正式なレビュープロセスが始まった。
技術的背景
現状の問題点
x/crypto/acme は ACME プロトコル(RFC 8555)を実装しているが、IETF ACME WG が策定中の「ACME Profiles」Internet-Draft に対応していない。そのため、Let's Encrypt が提供する以下のプロファイルを指定した証明書取得ができない。
classic: 従来通りの90日有効期間の証明書tlsserver: 45日有効期間、CA/Browser Forum の最新基準に準拠した小さな証明書shortlived: 約6日有効期間。失効情報が不要になり、高頻度自動更新を前提とした構成に最適tlsclient: TLS クライアント認証を含む証明書(2026年7月以降廃止予定)
特にshortlivedプロファイルは IP アドレス向け証明書の発行に必要であり、その需要が高まっている。
提案された解決策
@rolandshoemaker が提案したAPIの形状は以下の通り。
// Directory 構造体への追加
type Directory struct {
// 既存フィールド省略...
// Profiles は CA がサポートするプロファイル識別子とその説明のマップ。
// 空の場合、CA は発行プロファイルをサポートしていない。
Profiles map[string]string
}
// Order 構造体への追加
type Order struct {
// 既存フィールド省略...
// Profile は注文に使用するオプションの発行プロファイル。
Profile string
}
// 新しい OrderOption 関数
// WithOrderIssuanceProfile は注文の profile フィールドを設定する。
// CA の Directory.Profiles に存在するプロファイルと共に使用する。
func WithOrderIssuanceProfile(profile string) OrderOption
これによって何ができるようになるか
ACME プロトコルを使った証明書発行時に、発行プロファイルを明示的に指定できるようになる。
コード例
// Before: プロファイル指定の手段がなく、CAのデフォルト証明書のみ取得可能
client := &acme.Client{Key: myKey}
order, err := client.AuthorizeOrder(ctx, ids)
// After: WithOrderIssuanceProfile でプロファイルを指定
client := &acme.Client{Key: myKey}
// まずディレクトリを確認し、サポートされているプロファイルを取得
dir, err := client.Discover(ctx)
// dir.Profiles == map[string]string{
// "shortlived": "Certificates with ~6 day validity...",
// "classic": "Traditional 90-day certificates...",
// }
// shortlived プロファイルで注文を作成
order, err := client.AuthorizeOrder(ctx, ids,
acme.WithOrderIssuanceProfile("shortlived"),
)
実践的なユースケース:
- IP アドレス向け証明書の自動取得: Let's Encrypt の
shortlivedプロファイルを使って、IPアドレスに対する TLS 証明書を取得できる - 証明書の自動ローテーションシステム: 6日有効の短期証明書により、CRL(失効リスト)なしで安全な証明書管理が可能
- モダンな証明書要件への対応: CA/Browser Forum の最新要件に準拠した45日有効証明書(
tlsserverプロファイル)の取得
議論のハイライト
- 早期採用への懸念: 当初
@seankhliaoと@rolandshoemakerは「Internet-Draft はまだドラフト段階であり時期尚早」と慎重な姿勢を示していた。過去にx/crypto/acmeがドラフト段階の仕様を早期に取り込み、後から変更を強いられた経緯がある - タイミングの変化: 当該 Internet-Draft が IETF ACME WG に正式採択され、Let's Encrypt が短期証明書と IP 証明書を一般提供開始したことで状況が変わり、実装の機運が高まった
Profilesフィールドの型:map[string]stringのままにするか、将来の仕様変更に備えてより複雑な型にするかが議論された。Let's Encrypt の担当者@aarongableがmap[string]stringで問題ないと表明し、その方向で固まりつつある- 実装 CL:
@sigmavirus24(提案者)が実装のプロトタイプを fork に公開し、その後 Gerrit に CL #788000 として提出。実際の実装が先行している状態でレビューが進んでいる - autocert パッケージへの影響: 関連 PR #336(
golang/crypto)ではautocert.ManagerにProfileフィールドを追加する実装も示されており、高レベルAPIにも波及する