🐡

ローカル環境のサーバー証明書(マルチドメイン含む)作成方法

に公開

今回は、ローカル環境のサーバー証明書作成方法についてまとめてみました。
あくまでローカル環境(PC上)で構築したWebサーバーに適用するサーバー証明書を、同一端末あるいは同一ネットワーク上にある別端末にインストールする方法となります。

1. サーバー証明書について

1-1. 🔐 サーバー証明書(SSL証明書)ってなに?

インターネットで安全に通信するための「身分証明書」みたいなものです。

1-2. 🌐 どうして必要なの?

たとえば、あなたがウェブサイトにパスワードやクレジットカード番号を入力するとき、それが他の人に盗まれたら困りますよね?

SSL証明書があると、

  • 入力した情報が暗号化される ✅
  • サイトの「本物の証明」がされる ✅

これにより、安全に通信できるのです!

1-3. 🔎 どう見分けるの?

ブラウザのアドレスバーに注目!

  • 🔒 鍵マークが出ている → SSL証明書あり、安全!
  • URLが「https://〜」 → 暗号化通信中!

例:

https://example.com ← 安全なサイト
http://example.com ← 安全でない可能性あり

1-4. 🛠️ 簡単な仕組み

  1. あなた(ユーザー)がWebサイトにアクセス
  2. サイトが「この証明書で本物のサイトですよ!」と提示
  3. あなたのブラウザがそれを確認
  4. OKなら、情報が暗号化されて送られる

1-5. 💡 まとめると…

用語 わかりやすく言うと
SSL/TLS 通信を暗号化する技術
サーバー証明書 サイトが本物だと証明するもの
HTTPS 暗号化されたWeb通信のしくみ

2. ローカルホスト(またはPC名を含んだ)のサーバー証明書の作り方

PowerShellでDnsNameでlocalhostのサーバー証明書を[中間証明書]として作成できます。

New-SelfSignedCertificate -DnsName "localhost" -CertStoreLocation "cert:\LocalMachine\My" -NotAfter (Get-Date).AddYears(30)

PowerShellでDnsNameで以下のように複数指定することで、サーバー証明書に複数のドメインを含めることができます。
```powershell
New-SelfSignedCertificate -DnsName "localhost","PC名" -CertStoreLocation "cert:\LocalMachine\My" -NotAfter (Get-Date).AddYears(30)

※サブジェクト代替名を確認すると、指定したドメインが記載されています。

※作成したあと、IISのSSL証明書を変更することを忘れずに

3. localhostで保護された通信にする方法

3-1 .localhostでSSL通信を行う場合の注意点

※保護されていない通信の場合、ブラウザ側の処理(navigator.credentials.createnavigator.credentials.get)でエラーになります。ブラウザは保護された通信であれば、公的認証局(CA)が発行したルート証明書でなくとも動きます。

しかし、localhostの証明書をプログラムで検証したとき、クライアント端末にあるクライアント証明書(SSL証明書と突合いする証明書)が、信頼されたルート証明機関に入っていても、公的認証局(CA)が発行したルート証明書(WinodowsUpdateで自動インストールされるもの)ではないため、エラーが発生する場合があります。

CSharpでは、X509ChainStatusFlags.UntrustedRootエラーが発生するため、ServicePointManager.ServerCertificateValidationCallbackにTrueを設定して回避します。
※参考文献
SslPolicyErrors
X509ChainStatusFlags

3-2. localhost証明書で保護された通信を行う方法

(1) [インターネットオプション] -> インターネットのプロパティから[コンテンツ]タブ -> [証明書] -> [中間証明書] から、作成したlocalhost証明書をダブルクリックで開きます。
(2) localhostのサーバー証明書をダブルクリックし、詳細タブからファイルコピーをクリックする。

(3) 証明書のエクスポートウィザードで以下の通り進める

  • 秘密キーのエクスポート
    • 「はい、秘密キーをエクスポートします」を選択する
  • エクスポート ファイルの形式
    • Personal Information Exchange - PCS #12(.PFX)を選択する
      • 以下のものに全てチェックを入れる
        • 証明のパスにある証明書を可能であれば全て含む
        • すべての拡張プロパティをエクスポートする
        • 証明書のプライバシーを有効にする
  • セキュリティ
    • 任意のパスワードを入力し、暗号化はAES256-SHA256を選択する
  • エクスポートするファイル
    • 任意の場所、任意のファイル名を指定する

(4) 証明書の管理を開く
(5) インポートをクリックする

(6) 証明書のインポートウィザードで以下の通り進める

  • (3)でエクスポートしたファイルを指定する(ファイルの種類を全てのファイルまたはPersonal Information Exchangeに変更するとファイルが表示されます)
  • 秘密キーの保護
    • (3)で指定したパスワードを入力する
    • 以下のものにチェックを入れる
      • すべての拡張プロパティを含める
  • 証明書ストア
    • 証明書を全て次のストアに配置するにチェックを入れて、参照から信頼されたルート証明機関を選択する

Discussion