開発環境やホームネットワークで「とりあえずTLSをかけたい」という場面は多いと思います。
このとき選ばれるのが 自己署名証明書(Self-signed certificate) です。
ただし「ブラウザ警告が出る」「毎回-kしないといけない」といった課題もあり、運用面で気をつけるポイントがあります。この記事では、その注意点と実践的な対処法を深掘りしてまとめます。
- 自己署名証明書とは?
認証局(CA)を介さずに自分自身で署名した証明書。
通信の暗号化はできるが、「なりすましされていない」保証はない。
信頼できる範囲(例:自宅LAN、開発環境)で利用するのが前提。
- ブラウザでの挙動
初回アクセス時に必ず「信頼されていない証明書です」と警告が出る。
一度「信頼する」と設定すれば、そのブラウザの通常モードでは次回以降は警告が出ない。
ただし、プライベートモード(シークレットモード)では信頼情報が保持されないため、毎回警告が出る。
⚠️ このため、日常的に自己署名証明書を使うなら「通常モードで利用する」「証明書をOSやブラウザの証明書ストアに追加する」のが実用的。
- cURLなどCLIツールでの扱い
curl -k https://example.local で検証をスキップできるが非推奨。
自己署名証明書を cURLのCAバンドルに追加 すれば -k 不要で使える。
ただし、これはcURL専用。wgetやRuby、Pythonなどはそれぞれ独自のCAストアを参照する場合が多い。
OS全体のCAストアに追加すれば、複数のツールで共通利用可能。
例(Debian/Ubuntu 系):
sudo cp myCA.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates
- 有効期限と更新の重要性
自己署名証明書は任意の期限を設定できるが、長期間(10年など)は危険。
鍵が漏洩した場合、長期利用されてしまうリスクがある。
1年ごとに更新するルールにしておくと安心。
更新時は「新証明書を配布 → 古い証明書を削除」の手順を明確にしておく。
- 秘密鍵ローテーションの意味
証明書更新を定期的に行うのは、有効期限切れ対策だけではない。
秘密鍵を長期間使い続けるとリスクが高まるため、定期的に鍵を再生成することで安全性を担保する。
運用上は「証明書更新=秘密鍵ローテーション」と考えるのがベスト。
- 「信頼」の仕組みを理解する
ブラウザやOSは「信頼できる認証局リスト(CAストア)」を持っている。
自己署名証明書はそのリストに含まれていないため、警告が出る。
解決策は 自分の証明書をCAストアに追加する こと。
ただし「広く配布するのは危険」なので、範囲をLANや特定のユーザーに限定すること。
- 外部認証局を使いたい場合
本来、Let’s Encryptなどの無料認証局を使うのが理想。
ただし .local や .lan のような内部専用ドメインは外部認証局から証明書を取得できない。
代替手段として DNS-01チャレンジ(ACME DNS challenge) を使えば、外部にサーバーを公開せずに正規証明書を取得できるケースもある。
ただし、これは「公開可能なドメインを持っている場合」に限られる。
- まとめ
自己署名証明書は 内部利用限定 なら十分実用的。
運用のコツは以下の通り:
クライアント側に証明書を登録して信頼させる
有効期限は1年程度で設定、定期更新を習慣化する
更新時は秘密鍵もローテーションする
OS全体のCAストアに登録すれば複数ツールで使える
👉 「暗号化」自体は自己署名証明書でも正しく機能するので、「誰を信頼するか」を明確に管理できれば十分安全に運用できます。