私は、与えられた回答やその他のリソースからのビットと断片を組み合わせることによって、Windowsでの自己署名証明書を自分の方法で困惑させなければなりませんでした。これが私自身の(できれば完全な)ウォークスルーです。それがあなた自身の苦痛な学習曲線のいくらかを節約することを願っています。また、独自の証明書を作成すると遅かれ早かれポップアップする関連トピックに関する情報も含まれています。
Windows 10以下で自己署名証明書を作成する
makecert.exeは使用しないでください。Microsoftによって非推奨になりました。
最新の方法では、Powershellコマンドを使用します。
ウインドウズ10:
管理者権限でPowershellを開きます。
New-SelfSignedCertificate -DnsName "*.dev.local", "dev.local", "localhost" -CertStoreLocation cert:\LocalMachine\My -FriendlyName "Dev Cert *.dev.local, dev.local, localhost" -NotAfter (Get-Date).AddYears(15)
Windows 8、Windows Server 2012 R2:
これらのシステムのPowershellでは、パラメーター-FriendlyNameおよび-NotAfterは存在しません。上記のコマンドラインから削除してください。
管理者権限でPowershellを開きます。
New-SelfSignedCertificate -DnsName "*.dev.local", "dev.local", "localhost" -CertStoreLocation cert:\LocalMachine\My
代わりに、以下の古いWindowsバージョンの方法を使用して、証明書の作成にWin 10のすべての機能を使用できます...
古いWindowsバージョン:
古いWindowsバージョンの推奨事項は、Win 10マシンで証明書を作成し、mmcインスタンスを使用して.PFXファイルにエクスポートし(以下の「証明書を信頼する」を参照)、それをターゲットマシンの証明書ストアにインポートすることです。古いWindows OS。証明書をインポートするには、それを右クリックしないでください。コンテキストメニューに[証明書のインポート]項目がありますが、Win Server 2008で使用するにはすべての試用版で失敗しました。代わりに、ターゲットマシンで別のmmcインスタンスを開き、[証明書(ローカルコンピューター)/個人/証明書]に移動します、中央のペインを右クリックして、[すべてのタスク]→[インポート]を選択します。
結果の証明書
上記のコマンドはどちらもドメインの証明書を作成します localhost
との*.dev.local
。
Win10バージョンにはさらに15年のライブタイムと、「Dev Cert * .dev.local、dev.local、localhost」という読みやすい表示名があります。
更新:-DnsName
上記のように)パラメータに複数のホスト名エントリを指定すると、これらのエントリの最初のものがドメインのサブジェクト(通称)になります。すべてのホスト名エントリの完全なリストは、証明書のサブジェクト代替名(SAN)フィールドに格納されます。(それを指摘してくれた@BenSewardsに感謝します。)
作成後、証明書はIISのHTTPSバインディングですぐに使用できます(以下の手順)。
証明書を信頼する
新しい証明書は信頼の連鎖の一部ではないため、どのブラウザーからも信頼できるとは見なされません。これを変更するために、マシン上の信頼されたルートCAの証明書ストアに証明書をコピーします。
mmc.exeを開き、ファイル→スナップインの追加と削除→左の列の「証明書」を選択→追加→「コンピューターアカウント」を選択→次へ→「ローカルコンピューター...」→完了→OK
左側の列で、「証明書(ローカルコンピュータ)/個人/証明書」を選択します。
新しく作成された証明書を見つけます(Win 10では、「フレンドリ名」の列が役立つ場合があります)。
この証明書を選択し、Ctrl-Cを押してクリップボードにコピーします。
左側の列で、「証明書(ローカルコンピュータ)/信頼されたルートCA /証明書」を選択します。
Ctrl-Vキーを押して、証明書をこのストアに貼り付けます。
証明書は信頼されたルート証明機関のリストに表示され、信頼できると見なされます。
IISでの使用
IISマネージャーに移動し、ローカルWebサイトのバインディングを選択→追加→https→フォームのホスト名 myname.dev.local
(証明書はに対してのみ有効*.dev.local
)を入力し、新しい証明書を選択→OKをクリックします。
ホストに追加
また、ホスト名をC:\ Windows \ System32 \ drivers \ etc \ hostsに追加します。
127.0.0.1 myname.dev.local
ハッピー
これで、ChromeとIEは証明書を信頼できるものとして扱い、開いたときにWebサイトをロードしますhttps://myname.dev.local
。
Firefoxは独自の証明書ストアを維持しています。ここに証明書を追加するには、FFでWebサイトを開き、FFが証明書について警告したときに例外に追加する必要があります。
Edgeブラウザーの場合、さらにアクションが必要になる場合があります(下を参照)。
証明書をテストする
証明書をテストするには、Firefoxが最良の選択です。(私を信じて、私はChromeファンの少年ですが、この場合はFFの方が優れています。)
理由は次のとおりです。
- Firefoxは独自のSSLキャッシュを使用しますが、これはシフト再ロード時に削除されます。そのため、ローカルWebサイトの証明書への変更は、FFの警告にすぐに反映されますが、他のブラウザーでは、Windows SSLキャッシュの再起動または手動での消去が必要になる場合があります。
- また、FFは証明書の有効性を確認するためのいくつかの貴重なヒントを提供します。FFが証明書の警告を表示したら、[詳細]をクリックします。FFは、テキストブロックの中央の行に1つ以上の可能な警告を含む短いテキストブロックを表示します。
証明書は自己署名されているため、信頼されていません。
この警告は正しいです!上記のように、FirefoxはWindows証明書ストアを使用せず、例外を追加した場合にのみこの証明書を信頼します。これを行うためのボタンは警告のすぐ下にあります。
証明書は名前に対して無効です...
この警告は、あなたが何か間違ったことをしたことを示しています。証明書の(ワイルドカード)ドメインがWebサイトのドメインと一致しません。この問題は、Webサイトの(サブ)ドメインを変更するか、一致する新しい証明書を発行することによって解決する必要があります。実際、証明書が一致していなくてもFFに例外を追加できますが、そのような組み合わせではChromeに緑色の南京錠の記号が表示されることはありません。
Firefoxは、有効期限が切れた証明書、古い署名アルゴリズムを使用した証明書など、この場所で他の多くの優れたわかりやすい証明書警告を表示できます。問題を特定するためにそのレベルのフィードバックを提供してくれる他のブラウザーは見つかりませんでした。
どの(サブ)ドメインパターンを開発するべきですか?
上記のNew-SelfSignedCertificateコマンドでは、ワイルドカードドメインを使用しました*.dev.local
。
あなたは考えるかもしれません:なぜ使用しないの*.local
ですか?
単純な理由:ワイルドカードドメインとしては違法です。
ワイルドカード証明書には、少なくとも第2レベルのドメイン名が含まれている必要があります。
したがって、フォームのドメインは*.local
HTTP Webサイトを開発するのに適しています。ただし、HTTPSの場合はそれほどではありません。開始する新しいプロジェクトごとに新しい一致する証明書を発行する必要があるためです。
重要な補足事項:
- 有効なホストドメインには、z〜zの文字、数字、ハイフン、ドットのみを含めることができます。アンダースコアは使用できません!一部のブラウザは、この詳細に本当にうるさく
motör_head.dev.local
、ワイルドカードパターンにドメインを一致させることを頑固に拒否する場合に困難を伴うことがあります*.dev.local
。に切り替えたときに準拠しますmotoer-head.dev.local
。
- 証明書内のワイルドカードは、ドメイン内の1つのラベル(= 2つのドットの間のセクション)にのみ一致し、それ以上は一致しません。
*.dev.local
一致します myname.dev.local
が、そうではありませんother.myname.dev.local
!
*.*.dev.local
証明書ではマルチレベルのワイルドカード()は使用できません。したがってother.myname.dev.local
、フォームのワイルドカードでのみカバーでき*.myname.dev.local
ます。その結果、第4レベルのドメイン部分を使用しないことが最善です。すべてのバリエーションを3番目のレベルの部分に配置します。このようにして、すべての開発サイトの単一の証明書を取得します。
Edgeの問題
これは実際には自己署名証明書に関するものではありませんが、それでもプロセス全体に関連しています。
上記の手順を実行した後、を開いたときにEdgeにコンテンツが表示されない場合がありますmyname.dev.local
。
その理由は、「ネットワーク分離」と呼ばれる、Modern Apps用のWindows 10のネットワーク管理の特徴的な機能です。
この問題を解決するには、管理者権限でコマンドプロンプトを開き、次のコマンドを1回入力します。
CheckNetIsolation LoopbackExempt -a -n=Microsoft.MicrosoftEdge_8wekyb3d8bbwe
エッジおよびネットワーク分離の詳細については、https:
//blogs.msdn.microsoft.com/msgulfcommunity/2015/07/01/how-to-debug-localhost-on-microsoft-edge/を参照してください。
makecert.exe
パスに含めるには、Visual Studio 2010コマンドプロンプトを使用する必要がありました。証明書については、もっと安全で使いやすいと思いました-a SHA512 -len 8192
-生成するのに永遠にかかりました。そして、私はそれを疑ったように、IISが使用した暗号化のレベルに影響を与えませんでした。デフォルトでは、IISは128ビットを使用します。これを変更するには、グループポリシーなどを実行する必要があります。さらに他の読者に注意してください:の後-eku
にマジックナンバーを変更しないでください、それらは必須です。