与えられた回答とその他のリソースからの断片を組み合わせて、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
(上記のように)、これらのエントリの最初のエントリがドメインのサブジェクト (AKA Common Name) になります。すべてのホスト名エントリの完全なリストは、証明書のサブジェクト代替名 (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 キャッシュを使用しており、これは shift-reload で消去されます。そのため、ローカル Web サイトの証明書に変更を加えると、FF の警告にすぐに反映されますが、他のブラウザーでは、再起動または Windows SSL キャッシュの手動パージが必要になる場合があります。
- また、FF は、証明書の有効性を確認するためのいくつかの重要なヒントを提供します。FF が証明書の警告を表示したら、[詳細設定] をクリックします。FF は、テキスト ブロックの中央の行に 1 つ以上の警告が表示される短いテキスト ブロックを表示します。
証明書は自己署名であるため、信頼されていません。
この警告は正しいです。上記のように、Firefox は Windows 証明書ストアを使用せず、Firefox 内で例外を追加した場合、この証明書のみを信頼します。これを行うためのボタンは、警告のすぐ下にあります。
証明書は名前に対して有効ではありません...
この警告は、何か間違ったことをしたことを示しています。証明書の (ワイルドカード) ドメインが Web サイトのドメインと一致しません。この問題は、Web サイトの (サブ) ドメインを変更するか、一致する新しい証明書を発行して解決する必要があります。実際、証明書が一致しない場合でも FF に例外を追加できますが、そのような組み合わせでは Chrome で緑色の南京錠の記号が表示されることはありません。
Firefox は、期限切れの証明書、古い署名アルゴリズムを使用した証明書など、この場所で他の多くの適切でわかりやすい証明書の警告を表示できます。問題を特定するためのこのレベルのフィードバックを提供してくれるブラウザーは他にありませんでした。
どの (サブ) ドメイン パターンを開発するために選択する必要がありますか?
上記の New-SelfSignedCertificate コマンドでは、ワイルドカード domain を使用しました*.dev.local
。
あなたは思うかもしれません:なぜ使わないの*.local
ですか?
単純な理由: ワイルドカード ドメインとしては違法です。
ワイルドカード証明書には、少なくともリテラルの第 2 レベル ドメイン名が含まれている必要があります。アスタリスク (*) は、3 番目のレベルから上にのみ使用できます。
したがって、xyz.local
HTTP で開発し、証明書を必要としない場合、この形式のドメインは問題ありません。ただし、HTTPS でそのドメイン パターンを使用すると、開始する新しいプロジェクトごとに新しい一致する証明書を発行する必要があります。の形式のドメインxyz.dev.local
と単一のワイルドカード証明書を使用することをお勧めし*.dev.local
ます。
重要な補足事項:
- 有効なホスト ドメインには、a から 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を開いたときにコンテンツが表示されないmyname.dev.local
場合があります。
その理由は、「ネットワークの分離」と呼ばれる最新のアプリ向け 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/ を参照してください。