証明書操作マニュアル
このページの目次
CA 発行済み・disk 配置済み・service 読込済み・client 受信のどれかを区別する。HTTPS 検証には名前・時刻・chain・信頼が必要。
| やりたいこと | 参照先 |
|---|---|
| browser 証明書エラー | 公開中の証明書を確認 |
| 更新後も期限切れ | 更新から配置 |
| CSR・ローカル証明書作成 | 名前・鍵・信頼 |
SNI は site 選択、hostname は識別検証
online:handshake と identity を検証する
# 完全な handshake 検証でエラーを隠さず対象へ接続する
-connect は TCP、-servername は SNI、-verify_hostname は名前検証、-verify_return_error は検証失敗時に中止する。-showcerts は相手の chain を表示。検証結果と stderr を読む。
特定入口なら -connect を実 IP にし、SNI/hostname は実 domain を保つ。私有 CA は管理された CAfile を使い、検証を切らない。
disk:metadata と期限を読む
# ファイル内の最初の証明書の名前・issuer・時刻を読む
通常 fullchain は leaf、その後 intermediate。これは最初の一枚の解析で chain 検証ではない。サービスの実ファイルを使う。
# 24 時間以内の期限切れを調べる
0 は期間内に期限切れにならないことを示す。非ゼロは結果・エラーを読む。単位は秒で、名前・信頼は別。
完全な handshake 検証でエラーを隠さず、private CA は信頼する -CAfile を指定する。-servername だけでは名前検証しない。checkend 86400 は24時間以内の失効を判定し、現在の失効や名前・chain・notBefore 検査とは別。
| 検査 | 失敗の根拠 | 修正箇所 |
|---|---|---|
| SAN / hostname | 接続名が SAN にない | 正しい名前で発行・URL 修正 |
| notBefore / notAfter | 時計誤り・有効前・期限切れ | 校時・更新して配置 |
| Chain | 中間証明書不足・chain 不一致 | 正しい fullchain を配置 |
| Trust | client が root CA を信頼しない | 適切な CA または管理された信頼。検証無効化をしない |
更新完了は client 側で確認
設置済みと配信中の証明書を照合する
# サービスが参照する disk 証明書の識別子を読む
serial と SHA-256 fingerprint を記録し、同じ endpoint/SNI と比較する。
# online leaf の fingerprint を比較用に抽出する
|
handshake 診断を省く metadata 抽出で、信頼検証ではない。後で完全検証する。不一致なら CDN/LB・別 instance の終端を調べる。
ここでは指紋抽出のみ。信頼検証は前節を使う。disk と配信版が違えば参照 path・権限・reload hook・LB/CDN の TLS 終端を確認し、必要な各 edge を検証する。
証明書の管理元を一つ選ぶ
acme.sh・Certbot・Caddy 自動 HTTPS は選択肢。管理元と保存先権限を確認し、同じ証明書へ重ねて適用しない。
# acme.sh 所有アカウントで発行済み domain・鍵種別を見る
次は ECC 発行済みが前提。なければ適切な HTTP/DNS challenge で先に発行する。install-cert は issue ではない。
# 発行済み証明書をサービスの固定参照先へ設置する
手動証明書の Caddy と、書込・reload 権限のあるアカウント向け。RSA は --ecc を外す。権限・fingerprint・reload log・online TLS を確認する。
Certbot:既存確認または初回発行
# Certbot の証明書名・domain・path を列挙する
Cert Name は domain と同じとは限らない。--cert-name は実名を使い、plugin は別途確認する。
webroot 初回発行は、既存 HTTP server が公開 80 で challenge path を /var/www/acme 配下から配信し、A/AAAA が正しいことが前提。Caddy 自動 HTTPS では不要。
# test CA で HTTP-01 経路を検証する
-w は server の webroot、-d は申請名。アカウント入力に従う。dry-run は本番配備用証明書を作らず、失敗原因を先に直す。
# test 成功後に発行し、サービス参照を別に設定する
certonly は Web 設定を変更しない。実 path を調べ、設定・検証・reload 後に client から TLS を確認する。
# 既存の更新設定と challenge を試す
成功しても配備済みとは限らない。timer・deploy hook を確認し、dry-run 時の hook 実行は --run-deploy-hooks 等の挙動を確かめる。
acme.sh は ECC 発行済み・保存先と権限・有効な reload が前提。RSA は --ecc なし。内部 workdir でなく安定した install-cert 先を参照する。同一証明書の更新主体を一つにし、DNS plugin と権限を確認する。
Caddy 自動 HTTPS は通常発行・更新を担当する。Caddy参照。手動証明書を選ぶ場合に外部更新を使う。challenge 経路・委任・TXT・権限を調べ、試験は staging/dry-run。cloud LB は binding も必要。
SAN を含む要求を作り公開鍵を照合
新 key・CSR:出力保護を先に行う
# この shell の新規秘密鍵ファイル権限を制限する
管理された場所と未使用名を使い、既存 server.key を上書きしない。
# private key と SAN 付き CSR を作る
OpenSSL 3 の -noenc は未暗号化。権限・配備保護を前提とする。暗号化なら省略し unlock を設計する。SAN に実名を列挙し、CN で代替しない。
# CSR の署名・SAN・公開鍵情報を確認する
-verify は CSR 自身の検証で、CA 発行・SAN 受理の証明ではない。提出は CSR のみで秘密鍵は保持する。
発行後に公開鍵 hash を比較する
# 秘密鍵から公開鍵を取り出して hash 化する
|
出力は公開鍵の hash だけ。次も同じ DER に揃える。
# 発行された証明書の公開鍵を hash 化する
|
|
server.crt は CA の leaf。hash 一致は鍵の対応だけで、SAN・期限・chain・信頼は別途確認する。
OpenSSL 3 の例。-noenc は暗号化しない鍵なので保存権限を保護する。CSR に秘密鍵は含まれない。発行後の公開鍵一致は信頼の証明ではない。localhost 自己署名には SAN と明示的信頼が必要。鍵漏洩時は鍵・証明書交換と失効を行う。
OpenSSL s_client · OpenSSL x509 · acme.sh installation · Certbot