概要
ローカル環境で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のセットアップ手順のページ |
