暗号化・証明書

自己署名証明書 じこしょめいしょうめいしょ

自己署名オレオレ証明書開発環境TLS証明書エラー内部利用
自己署名証明書について教えて

簡単に言うとこんな感じ!

第三者機関(CA)の署名なしに、自分で自分の証明書を作ったものだよ。「俺が俺であることは俺が保証する」という通称「オレオレ証明書」。開発・テスト環境では便利だけど、本番のWebサイトには使えないんだ!


自己署名証明書とは

自己署名証明書(Self-Signed Certificate) とは、信頼できる第三者機関(CA)の署名を受けずに、証明書の発行者と利用者が同一である証明書のことです。発行者が自分自身の秘密鍵で署名するため、「オレオレ証明書」とも呼ばれます。

通常のサーバー証明書はCAが発行するため、ブラウザは事前に登録されたルートCAをたどって信頼を検証できます。しかし自己署名証明書には信頼チェーンがないため、ブラウザは「この証明書は信頼できません」というエラーを表示します。

用途としては以下が主です。


自己署名証明書とCA署名証明書の比較

比較項目自己署名証明書CA署名証明書
発行コスト無料(opensslコマンドで即時生成可能)有料〜無料(Let’s Encrypt)
ブラウザの信頼デフォルトでエラー表示信頼済み(自動で緑錠前)
発行の手間非常に簡単CA審査が必要
公開Webサイトへの利用不可(ユーザー離脱を招く)必須
社内・開発環境適切(ルートCA登録との組み合わせで)使えるが過剰な場合も

歴史と背景

  • 1990年代:SSL普及初期、CA証明書が高価だったため自己署名が多用される
  • 2000年代フィッシングサイトが自己署名を悪用。ブラウザの警告が強化される
  • 2010年代:Let’s Encryptの登場により無償CA証明書が普及し、本番サイトへの自己署名利用がほぼ不要になる
  • 現在:開発環境専用ツール(mkcert等)が登場し、ローカル開発でのHTTPSが容易になる

opensslで自己署名証明書を作成する例

# 秘密鍵の生成
openssl genrsa -out server.key 2048

# CSR(証明書署名要求)の生成
openssl req -new -key server.key -out server.csr

# 自己署名証明書の生成(有効期限365日)
openssl x509 -req -days 365 -in server.csr \
  -signkey server.key -out server.crt

また mkcert というツールを使うと、ローカルのルートCAを自動登録した上で自己署名証明書を生成できるため、開発環境でのブラウザ警告を回避できます。


関連する規格・RFC

規格・RFC番号内容
RFC 5280X.509証明書フォーマット(自己署名を含む)
RFC 8555ACME(CA証明書の自動発行プロトコル:Let’s Encrypt等)

関連用語

  • PKI — 自己署名証明書が属さない信頼チェーンの仕組み
  • 認証局(CA) — 自己署名証明書が省略しているCA
  • Let’s Encrypt — 自己署名の代わりに無償で使えるCA証明書
  • mTLS — 自己署名クライアント証明書が使われることもある相互TLS認証
  • 証明書ピンニング — 特定の証明書を明示的に信頼する仕組み