Windows SDK で ClickOnce用のコード証明書ファイルを作成する

# 1. はじめに
* ClickOnceでアプリケーションを配布する時にマニフェスト著名を追加したい
* 配布するアプリケーションでMicrosoft SmartScreenの警告を表示させないようにしたい
* Windows SDKでコード認証書ファイルを作成したい


# 2. 開発環境
* Windos SDK 10
* ClickOnce
* Visual Studio 2022
* Windows 11
* C# (配布アプリケーション)
* .Net 6 (配布アプリケーション)

# 3. Windows SDK 10のインストール
## 3.1.  下記サイトよりインストーラーをダウンロードする

https://developer.microsoft.com/en-us/windows/downloads/windows-sdk/

## 3.2 インストーラーを起動して、指示通りインストールする

```winsdksetup.exe```

# 4. 証明書ファイルの内容
| 拡張子     | 取り扱い | 説明                                                         |
| ---------- | -------- | ------------------------------------------------------------ |
| ```.pvk``` | 公開厳禁 | 秘密鍵ファイル                                               |
| ```.cer``` | 公開     | 公開鍵を含む証明書ファイル<br />（ユーザーに配布）           |
| ```.pfx``` | 公開注意 | ```.pvk```と```.cer```から生成される<br />(Visual Studioでマニフェスト著名時に使用) |


# 5.証明書の作成
## 5.1. Developer Command Prompt for VS 2022を管理者として実行する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/f86b3ebd-7ae6-9606-0ccb-586a449c0db9.png)

## 5.2. 作業用フォルダを作成する
```
mkdir c:\cert
cd c:\cert
```

## 5.3. ```.pvk``` , ```.cer```ファイルを作成する
```
makecert -n "CN={発行元に表示したい組織名} ,O={アプリケーション名},C=JP" -a sha256 -b {有効開始日 01/01/2000} -e {有効期限 01/01/2100} -eku 1.3.6.1.5.5.7.3.3 -cy end -r -sv {pvkファイル名} {cerファイル名}
```

* 入力後の3回パスワードの入力が求められる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/7a920b9c-dbb4-15bb-2a0a-285f733e76c8.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/6fe44b85-07f9-c61a-e6fb-25b3ba604e14.png)

* 有効期限日の00:00までとなるため、有効期限日+1を設定する

## 5.4.```.pfx```ファイルを作成する
```
pvk2pfx -pvk {pvkファイル名} -pi {makecert実行時に入力したパスワード} -spc {cerファイル名} -pfx {pfxファイル名} -f
```

# 6. 証明書のインストール
## 6.1. ```.pfx```ファイルをダブルクリックする

## 6.2.ローカルコンピューターを選択して、次へボタンをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/52b74622-c5bc-be0d-d72c-bc16056aaa88.png)

## 6.3.次へボタンをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/2ea0857a-f11e-5348-9b3e-fe7c6b704946.png)

## 6.4 パスワードを入力して、次へボタンをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/1532f051-502c-d6d0-202d-0f671fa91184.png)

## 6.5. 証明書をすべて次のストアに配置するを選択して、信頼されたルート証明書期間を参照して次へボタンをクリックする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/9142f20a-c2e9-f564-8da0-72960d26b91b.png)

## 6.6 完了ボタンをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/0c09caa5-7717-a9e1-01c2-68533bdb0ee1.png)

## 6.7. certmgr.mscを起動する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/d713fdb3-3f71-c608-6d92-93557b1172cb.png)

* インストールした証明書を確認する

# 7. ClickOnceの町名されたマニフェストへの登録(抜粋)
## 7.1. 公開のマニフェストの著名でClickOnceマニフェストに著名するにチェックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/fda3697f-cedd-1b6e-6c2f-a48a45478c61.png)

## 7.2. ファイルから選択をクリックする
* 作成した```.pvk```ファイルを選択して、パスワードを入力する

# 8. 参考文献

http://223n.blog.jp/archives/60505495.html

https://qiita.com/do-gugan/items/65ab430fa6f47450218d

https://mseeeen.msen.jp/code-signing-certificate/