Open1

自己証明書とは?開発と本番での違いを整理する

TaiyoTaiyo

自己証明書とは?開発と本番での違いを整理する

ViteやNode.jsでHTTPS環境をローカル開発するとき、自己証明書(自己署名証明書)という言葉に出会うことがありました。
このスクラップでは、その意味と使い方、そして本番用の証明書との違いを整理します。

自己証明書とは🔐

自己証明書とは、正式な認証局(CA)を通さずに、自分で発行したTLS(SSL)証明書のことです。
つまり、「自分が自分を証明している」状態です。

openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365

このようなコマンドで簡単に作れます。

なぜブラウザに警告が出るの?⚠️

ChromeやFirefoxなどのブラウザは、証明書の発行元が「信頼された認証局(CA)」であることをチェックします。

自己証明書はCAを通していないので、ブラウザから見ると 「この証明書は信用できない」 という扱いになります。

この接続ではプライバシーが保護されません
NET::ERR_CERT_AUTHORITY_INVALID

開発中は「詳細」から続行できますが、本番では致命的なセキュリティリスクになります。

正式な証明書との違い

項目 自己証明書 正式な証明書(CA発行)
発行元 自分自身 認証局(Let’s Encrypt など)
信頼性 なし あり(ブラウザで警告なし)
用途 開発用 本番運用
ブラウザの警告 出る 出ない
コスト 無料 無料〜有料(Let’s Encryptなら無料)

開発時のベストプラクティス:mkcert 🛠

開発用に安全&簡単に使えるのが mkcert というツールです。

brew install mkcert
mkcert -install
mkcert my-app.local

これを使うと、ローカルに信頼された認証局を追加したうえで証明書を発行してくれるため、ブラウザに警告が出ません。
Viteなどでもそのまま組み込み可能です:

// vite.config.ts
import fs from "fs";

export default {
  server: {
    https: {
      key: fs.readFileSync("my-app.local-key.pem"),
      cert: fs.readFileSync("my-app.local.pem"),
    },
  },
};

まとめ📝

  • 自己証明書はローカル開発で使えるが、ブラウザ警告が出る
  • 本番では必ず信頼された認証局の証明書を使う(例:Let’s Encrypt)
  • 開発時は mkcert を使うことで警告を回避でき、安全にHTTPS通信のテストが可能