Azure を使った 公的証明書 の購入と発行の手順

# はじめに
公的証明書を利用するサービスなどを 検証 する事があると思います。
証明書は取っつきにくいですし、利用するには コストが掛かるため、中々手を出せない領域かなぁ・・と思います。

私の方は、約１年前（2023 年 6 月）に、Azure を使って 証明書を初めて発行しましたが、やはり 本物の証明書を扱う事で、学ぶことが多くありました。

この度、もう１枚の証明書を発行する機会があったため、手順と 画面キャプチャを整理しましたので、この記事で紹介したいと思います。

Azure で 公的証明書を発行する場合、**"App Service 証明書"** というサービスを使います。
名称こそ  **"App Service 証明書"** となっていますが、App Service 以外でも活用することが可能です。

以下の公開情報の手順を元にしています。

**公開情報：Web アプリの App Service 証明書を作成して管理する**

https://learn.microsoft.com/ja-jp/azure/app-service/configure-ssl-app-service-certificate?wt.mc_id=mvp_407731&tabs=portal

# 前提事項
証明書を発行する前に、ドメイン を取得して 外部公開済み である必要があります。
実際に 所持しているドメインに対して、証明書を発行します。

**ポイント**
- ドメインを取得済みであること
- 外部 DNS サーバーで 名前解決を提供していること
- 上記の DNS サーバーで TXT レコードで任意の文字列を公開可能なこと
- 上記の DNS サーバーに、ネイキッドドメイン名 を解決できるように A レコードを追加済であること

:::note info
私の環境の場合は、Azure の App Service ドメイン を使って、**"carol226.com"** というドメインを取得しており、Azure DNS ゾーン を使って、**"sfb"** という A レコードを作成して 外部 Web サービスの IP アドレス を指定しました。<br><br>**nslookup sfb.carol226.com** を実行すると、IP アドレスが応答される状態です。
:::

Azure で ドメインを購入し、Azure DNS ゾーンで 外部 DNS を公開する方法については、以下の記事を参考にしてください。

https://qiita.com/carol0226/items/3ce40224c579e35017b0

:::note warn
**ポイント** として記載した条件を満たした ドメイン と DNS であれば、プロバイダーの DNS サービスを利用しても、自社のデータセンターで運用している DNS サーバー でも 理論上問題ないと思います
:::

# 費用について
App Service は、有料のサービスです。
Azure の 無料サブスクリプション では利用する事ができないため、ご注意ください。
Azure を 有料サブスクリプションにアップグレードしてから、利用が可能になります。

**公開情報：App Service の料金**
https://azure.microsoft.com/ja-jp/pricing/details/app-service/windows/

**Azure App Service の証明書** 欄より抜粋（2024 年 5 月 26 日 時点）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/ce927aab-b6fb-8ac5-c0ae-a4462194b528.png)

:::note info
この記事では、**標準 SSL 証明書** を発行した時の画面キャプチャを使用しています。
:::

# 発行される証明書のスペック

**ネイキッドドメイン名** を **sfb.carol226.com** として指定した場合に作成された 標準 SSL 証明書 の内容です。

|フィールド|値|
|:-:|:-:|
|発行者|Go Daddy Secure Certificate Authority - G2|
|署名アルゴリズム|sha256RSA|
|署名ハッシュアルゴリズム|sha256|
|有効期間|１年|
|サブジェクト|CN = sfb.carol226.com|
|公開キー|RSA (2048 Bits)|
|公開キーのパラメーター|05 00|
|拡張キー使用法|サーバー認証 (1.3.6.1.5.5.7.3.1)<br>クライアント認証 (1.3.6.1.5.5.7.3.2)|
|CRL 配布ポイント|URL=http://crl.godaddy.com/gdig2s1-20547.crl|
|サブジェクト代替名|DNS Name=sfb.carol226.com<br>DNS Name=www.sfb.carol226.com<br>**※ www なし と あり で 2つ作成されます**|
|基本制限|Subject Type=End Entity<br>Path Length Constraint=None|
|キー使用法|Digital Signature, Key Encipherment (a0)|

**全般 タブ**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/dd438b72-eff8-6562-e69e-127affa2c9d9.png)

**詳細 タブ**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/e945eba8-c4bf-7662-cfbe-8c7a6284f86d.png)

**証明のパス タブ**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/4f457adf-ca26-63ec-b8fb-45749e9e505a.png)

:::note info
皆さんの PC や スマホ にも、出荷時から 以下の ルート証明書 が提供されていると思います。それによって 今回発行した証明書が公的に証明されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/fd041949-1ebc-bedd-7dae-81ec631ec8a2.png)
※上記の画面は、Windows で **Certlm.msc** コマンドの実行によって 確認できます。
:::

# 証明書作成の流れ
証明書の作成は、以下の 4 ステップで行います。
1. Azure リソース（App Service 証明書）の作成
2. 証明書の発行
3. ドメインの所有権を確認する
4. 証明書のダウンロード

## 1. Azure リソース（App Service 証明書）の作成
まずは、Azure 上で 証明書 を管理していくための リソース を作成します。
このリソースを使って、証明書を発行したり、更新したり、再発行するなどの管理操作を実施していきます。

**公開情報：App Service 証明書を購入して構成する**
https://learn.microsoft.com/ja-jp/azure/app-service/configure-ssl-app-service-certificate?wt.mc_id=mvp_407731&tabs=portal#buy-and-configure-an-app-service-certificate

0. Azure Portal の 検索バーに「証明書」と入力 ① し、**App Service 証明書** を選択 ② します。App Service 証明書 のページが開いたら、**作成** をクリック ③ します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/1ee45556-e5c5-beb4-b0bd-9ad4a6ebcfa5.png)
　<br>
0. **基本** タブでは、以下の設定を行い **確認および作成** を押します。
**SKU** を 選択します（緑枠の箇所）
キャプチャでは、**Standard**（標準 SSL 証明書）を選択しています。
**ネイキッドドメインのホスト名** は、実際に 名前解決 で利用したい ドメイン名 を入力します。
**証明書名** は、Azure リソースの名称ですので 任意の名前で構いません。
**自動更新** は、任意で選択してください（私は、永続的に利用する想定で 有効化 しましたが、後で設定変更も可能です）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/aa82ea6d-d70c-065d-329d-72d7e1fa7324.png)
　<br>
0. **確認および作成** タブでは、内容を確認して **作成** を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/92198a92-3e1c-c858-d6a6-75fb94616492.png)
　<br>
0. リソースが作成されると。以下の通知が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/7b813d2a-a0a8-0b2e-88a0-29446cc9dd83.png)
　<br>
0. 作成の完了画面です。**リソースに移動** を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/781de09c-a02e-4dfe-232f-a69cc6ad0e51.png)
　<br>
0. 作成された Azure リソース の画面です。緑下線部が **発行の保留中** になっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/77956166-ccf3-2312-6118-7cbd7108dfe2.png)

## 2. 証明書の発行
リソースを作成した段階では **発行の保留中** になっており、まだ 証明書 は発行されていません。続けて、手順１：Key Vault への格納、手順２：ドメインの所有権の確認、手順３：割り当て を行うことで、証明書を利用できるようになります。

**公開情報：証明書を Azure Key Vault に格納する**
https://learn.microsoft.com/ja-jp/azure/app-service/configure-ssl-app-service-certificate?wt.mc_id=mvp_407731&tabs=portal#store-the-certificate-in-azure-key-vault

0. 左ペインから **証明書の構成** を選択し、**手順１：格納** の欄をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/660089c5-b77f-03f9-e0cd-4cf0428c6fc1.png)
　<br>
0. **キーコンテナーから選ぶ** をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/0f54b6f9-c603-bc29-aad9-076f73d06c21.png)
　<br>
0. 以下の画面では、新しく発行した証明書を保管するための Azure KeyVault のコンテナーを選択します。コンテナーを指定したら **選択** を押します。
既存のコンテナー を選択する（赤枠）か、新しく作成（緑枠）します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/47bb3f84-47ac-1b74-b8ef-21b920854449.png)
　<br>
0. KeyVault の選択が完了すると、以下の画面になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/ceccf9c2-e1a3-34f0-5056-0af13bf8c00b.png)

## 3. ドメインの所有権を確認する
ドメインの所有権を確認するまでは、証明書を利用することができません。
公開情報には、以下の４通りの確認方法が紹介されていますが、本記事では **ドメイン検証** を採用しています。

- App Service の確認
- ドメインの検証
- メールによる確認
- 手動による確認

**公開情報：ドメインの所有権を確認する**
https://learn.microsoft.com/ja-jp/azure/app-service/configure-ssl-app-service-certificate?wt.mc_id=mvp_407731&tabs=portal#confirm-domain-ownership

0. 再び **証明書の構成** の画面に戻ると、**手順１：格納** にチェックが入った状態になります。続けて **手順２：確認** の欄をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/4821b748-7874-8612-d7a5-9dd85c4f4fcb.png)
　<br>
0. 今回は、**ドメインの検証** の方法で確認することにします。
この場合は、**ドメイン確認トークン** を DNS サーバーに登録する必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/ae323b2c-874d-fd7f-8398-1ef465044fe7.png)
下図は、Azure DNS ゾーン 上に TXT レコードを追加した際の画面です。
TXT レコードは、１つの @ の行に 複数のレコードを追加する事ができます。
別の目的で登録済みの TXT レコード と共存させられます。
赤枠の部分が 今回追加した **ドメイン確認トークン** です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/df2d3a7e-cb1d-128d-24ef-ea5f59901ef7.png)
　<br>
0. DNS 側で、TXT レコードが構成できたら **確認** を押します。右上のような 通知が表示されれば OK です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/a329fb4d-b885-bf1d-1efc-85d3ed6b9b03.png)
　<br>
0. うまく TXT レコードの確認が完了すると、下図のように **証明書はドメイン確認済みです** という表示になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/b718debd-0572-eddf-2f21-ca9d6ee32a26.png)
　<br>
0. **証明書の構成** の画面に戻ると、以下のように ３か所すべてに チェック が入った状態になっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/6c30f3a6-8c38-27c1-c2e5-d764da95896e.png)
　<br>
0. 概要 ページを表示すると **証明書の状態** が **発行済み** になっている事が判ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/800d15c7-aef2-efc9-b6e4-ef636908ee84.png)

## 4. 証明書のダウンロード
発行した証明書は、KeyVault の中に保存されていますが、以下から ダウンロードできます。

**公開情報；App Service 証明書をエクスポートする**
https://learn.microsoft.com/ja-jp/azure/app-service/configure-ssl-app-service-certificate?wt.mc_id=mvp_407731&tabs=portal#export-an-app-service-certificate

0. 左ペイン **設定** の **証明書のエクスポート** から **Key Vault シークレットを開く** をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/619e70ba-4860-28ee-762a-336a1c5aec57.png)
　<br>
0. 以下の箇所をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/ef00ad1d-946f-2693-9947-e240a24a5bd2.png)
　<br>
0. **証明書としてダウンロード** を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/c0e3de1a-ac06-3247-9c9a-c13b49bf6b5b.png)

:::note info
以上で、証明書の作成と発行は完了です。
この証明書は 任意のサービス で サーバー証明書 として利用が可能です。

次章では、例 として IIS の Web サイト にバインドして利用した 例 を紹介しています。
:::

# (おまけ) 作成した証明書を IIS にバインドしてみる
以降は、ダウンロードした証明書を IIS にバインドして公開してみた例です。
App Service 証明書 を IIS の Webサイトで公開することも可能・・・ということをご理解いただけると思います。

この手順は、先に IIS を構築して、HTTP で Web サイトが公開された状態になっていることを前提にしています。

## 証明書のインポート
0. Web サーバー (IIS) へダウンロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/67527d82-f5f2-8d8f-5384-2c1ed4fcdf08.png)
　<br>
0. ローカルコンピューター に保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/7bd7725b-0062-7fa4-36af-e4b1b633c370.png)
　<br>
0. ダウンロードしたファイルを選択して **次へ** を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/810278ca-67e6-da53-84dd-d3785ce936f6.png)
　<br>
0. 特に何も指定せずに **次へ** を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/60b6e383-f6f7-f1ab-bf30-e4a943f7ef19.png)
　<br>
0. 特に何も指定せずに **次へ** を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/6b0d2296-67a4-b5b9-2e33-197986c8b5d8.png)
　<br>
0. 以下の画面になったら、**完了** を押して終了します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/ae46d13a-d2aa-6d92-6fc2-6fb49c1c1285.png)

## 証明書を Web サイト にバインドする

0. インターネットインフォメーションサービス マネージャー を起動します。
以下の画面で 公開したい Web サイト（Default Web Site）を選び、右ペインの **バインド** を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/058aee99-7220-d164-8ad7-d5fd2034a70a.png)
　<br>
0. **追加** を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/c393649a-7fe1-3914-12cf-03441f5e153b.png)
　<br>
0. 以下のように HTTPS のサイト条件を追加して、**SSL 証明書** 欄で 先ほどインポートした証明書を選択してから、**OK** を押します。
証明書が選択出来ない場合は、証明書の作成やインポートで 何かミスがあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/9318f0b9-4574-1aa0-315c-ed2bb6d11c91.png)
　<br>
0. 以下のように HTTPS のサイトが追加されたことを確認して **閉じる** を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/62277c19-7484-aa49-e9f5-6f74eacfec47.png)
　<br>
0. すると、以下のように 世界中の任意の PC から、URL を指定して HTTPS の Web サイトを参照できるようになっています。証明書も セキュリティで保護された状態であることを確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/1d4bd5fc-84bc-33e0-7c71-061b8703c150.png)

以上のように Azure の App Service 証明書 を発行して、Azure 以外のサービスで利用できることをご理解いただけたと思います。