概要
ローカル環境でhttpsを使用したWeb APIを実装して、IIS上で動作検証を試みた。
MicrosoftのDocを参考に、インターネットインフォメーションサービス (IIS) マネージャー上で自己署名証明書を作成した。
ブラウザでWeb APIのURLを入力すると、下記エラーが発生した。
(Google chrome/Microft Edge/Internet Explorerで同様のエラーが発生しため、ブラウザ依存性は無し)
原因を調査した結果、「IISマネージャーの自己署名証明書は不十分」ということがわかった。
前記の問題を回避する方法として、「PowerShellで自己署名証明書」を生成する方法がある。
この記事に、問題(ERR_CERT_COMMON_NAME_INVALID)が発生した設定手順、問題を回避する手順、参考にしたサイトを記載する。
動作環境
IIS version 10.0.19041.1100
Google Chrome 92.0.4515.107
問題(ERR_CERT_COMMON_NAME_INVALID)が発生した設定の手順
1. IIS上で自己署名証明書を作成する
(1)インターネット インフォメーション サービス (IIS) マネージャーを起動する。
(2)[サーバー証明書]を選択する。
(3)右の「操作」-「自己署名入り証明書の作成」を選択する。
(4)フレンドリ名を指定して、「OK」を選択する。
(5)自己署名入り証明書が作成されていることを確認する。
2. IISに評価用サイトを新規追加する
評価用サイトには、下記記事のWeb APIを使用する。
https://qiita.com/SY81517/items/cf4e3983f8e063bb0e28
(1)Visual StudioでWebアプリケーションのプロジェクトを選択する。「発行」を押下する。
(2)IISに配置するASP.NET Webアプリケーションを発行する。
フォルダパスは任意。Visual Studioを管理者権限なしで起動して、管理者権限が必要なフォルダパスを指定すると、発行に失敗するので注意。
(3)IISマネジャーで「サイトの追加」を選択する。
(4)Webサイトの設定を行う。
サイト名:任意
コンテンツディレクトリ
・ 物理パス:[発行]で指定したフォルダパス
バインド
・種類は[https]/ポート番号は任意。
・SSL証明書は[自己署名証明書]を使用する。
3. 動作確認(ブラウザでWeb APIのURLを指定)
下記URLを指定したときに、「ERR_CERT_COMMON_NAME_INVALID」が発生する。
https://localhost:59320/api/products
問題を回避する手順
1. PowerShellを用いて、自己署名証明書を作成する
(1)PowerShellを管理者権限で実行する。
(2)下記コマンドを実行する。
> New-SelfSignedCertificate -DnsName "localhost" -CertStoreLocation "cert:\LocalMachine\My"
PSParentPath: Microsoft.PowerShell.Security\Certificate::LocalMachine\My
Thumbprint Subject
---------- -------
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX CN=localhost
コマンドの詳細はNew-SelfSignedCertificate を参照のこと。
2. 自己署名証明書の使用を許可する
(1)Windowsボタンを押して「cert」と入力する。
(2)「コンピュータ証明書の管理」をクリックする。[ファイル名を指定して実行]で[certlm.msc]でも可。
(3)「個人」→「証明書」フォルダをクリックする。
(4)作成した証明書を選択して、右クリックで「コピー」を選択する。
(5)[信頼されたルート証明機関]で[証明書]フォルダを右クリックで「貼り付け」を選択する。
(6)貼り付けた証明書が追加されたことを確認する。
3. PowerShellで作成した自己署名証明書をIISで使用する
(1)インターネット インフォメーション サービス (IIS) マネージャー を起動する。
(2)新規追加した評価用サイトを選択する。
(3)「サイト編集」の「バインド」を押下する。
(4)下記のように「サイト バインド」を編集する。
ホスト名:localhost
SSL証明書:Powershellで作成したものを選択する。
4.動作確認(ブラウザでWeb APIのURLを指定)
実行結果は下記の通り。エラーが発生せず、HttpsのGETメソッドが実行された。
参考サイト
No | リンク | 概要 |
---|---|---|
1 | Blog: How to Create a Self Signed Certificate For Your Local IIS Website | ローカルサイトの自己署名証明書の作成する手順を記載したブログ(英語) |
2 | IIS自己証明書の警告エラー無しで作成方法。localhostをSSL/TLSで接続 | IIS証明書の警告を出さずに作成する方法が記載されたブログ。 |
3 | How can I create a self-signed cert for localhost? | stackoverflowの質問「ローカルホストの自己署名証明書を作るにはどうすればよいか?」 |
4 | New-SelfSignedCertificate | Microsoft社PowerShellのNew-SelfSignedCertificateコマンドの記事 |
5 | How to Set Up SSL on IIS 7 | Microsoft社のIISのセットアップ手順のページ |