Tricentis Tosca Server用の自己署名証明書作成方法

# 自己署名証明書作成手順（Windows 10）
- 目的
TricentisのTosca Serverをインストールする際、[Use Tosca Server with an HTTPS binding](https://documentation.tricentis.com/tosca/2410/en/content/tosca_server/toscaserver_https.htm)で接続するための自己署名証明書が必要であったため、作成方法をまとめてみました。

## 1. 作業ディレクトリの設定
まずは、証明書、秘密鍵、CSRなどのファイルを整理するための作業ディレクトリを作成します。

- 作業ディレクトリを作成
例えば、`C:\ssl_certificates` というディレクトリを作成し、その中に秘密鍵、証明書、CSRなどのファイルを格納します。

```bash
mkdir C:\ssl_certificates
mkdir C:\ssl_certificates\keys
mkdir C:\ssl_certificates\certs
mkdir C:\ssl_certificates\csr
mkdir C:\ssl_certificates\ca
mkdir C:\ssl_certificates\logs
```

## 2. OpenSSLのインストール
WindowsにOpenSSLをインストールしていない場合は、[Shining Light Productions](https://slproweb.com/products/Win32OpenSSL.html) から通常版のインストーラーをダウンロードし、インストールします。

## 3. 秘密鍵の生成
秘密鍵（machineName.key）を生成します。生成した鍵は C:\ssl_certificates\keys に保存します。

```bash
openssl genpkey -algorithm RSA -out C:\ssl_certificates\keys\machineName.key -aes256 -pkeyopt rsa_keygen_bits:2048
```
- オプションの説明
-aes256: 鍵をAES-256で暗号化します（パスフレーズが求められます）。
-pkeyopt rsa_keygen_bits:2048: 鍵長を2048ビットに設定します。

## 4. CSR（証明書署名要求）の作成
次に、CSRを作成します。作成する際には、証明書に含める情報（CN、組織名など）を指定します。

```bash
openssl req -new -key C:\ssl_certificates\keys\machineName.key -out C:\ssl_certificates\csr\machineName.csr -subj "/CN=machineName.domain.com"
```

- オプションの説明
-subj: /CN=machineName.domain.comで証明書の件名（Common Name）を指定します。ここでは、machineName.domain.com や machineName.local といった実際に使用するDNS名を指定します。

## 5. CSRにSAN（Subject Alternative Name）を追加
SAN（Subject Alternative Name）を追加することで、証明書が複数のDNS名でも有効になるように設定します。

- openssl.cnf ファイルを編集
OpenSSLの設定ファイル（openssl.cnf）にSANを追加します。

```ini
[ req ]
req_extensions = v3_req  # コメントアウトされているのを有効化

[ v3_req ]
subjectAltName = @alt_names  # ← SANの設定を有効化

[ alt_names ]
DNS.1 = machineName.domain.com  # ← 証明書に記載したいDNS名を指定
DNS.2 = www.machineName.domain.com  # 必要に応じて追加
```

- SANを含むCSRの作成
これで、SANを含むCSRを作成することができます。Common Nameは、machineName.domain.com や machineName.local といった実際に使用するDNS名を指定します。

```bash
openssl req -new -key C:\ssl_certificates\keys\machineName.key -out C:\ssl_certificates\csr\machineName.csr -config "C:\Program Files\OpenSSL-Win64\bin\cnf\openssl.cnf" -extensions v3_req
```

## 6. 証明書の自己署名
作成したCSRを使って、自己署名証明書を生成します。証明書の有効期限は1年間（365日）に設定します。

```bash
openssl x509 -req -in C:\ssl_certificates\csr\machineName.csr -signkey C:\ssl_certificates\keys\machineName.key -out C:\ssl_certificates\certs\machineName.crt -days 365 -sha256 -extfile "C:\Program Files\OpenSSL-Win64\bin\cnf\openssl.cnf" -extensions v3_req
```
- オプションの説明
-days 365: 証明書の有効期限を1年に設定します。
-sha256: SHA-256を署名アルゴリズムとして使用します。

## 7. 証明書と秘密鍵を.pfxファイルに変換
作成した証明書（.crt）と秘密鍵（.key）を組み合わせて、.pfx（PKCS#12）形式のファイルを作成します。

```bash
openssl pkcs12 -export -out C:\ssl_certificates\certs\machineName.pfx -inkey C:\ssl_certificates\keys\machineName.key -in C:\ssl_certificates\certs\machineName.crt -certfile C:\ssl_certificates\certs\machineName.crt
```

- オプションの説明
-export: PKCS#12形式のファイルをエクスポート
-out machineName.pfx: 出力ファイル名
-inkey machineName.key: 秘密鍵の指定
-in machineName.crt: 証明書の指定
-certfile machineName.crt: 追加の証明書（今回は自己署名証明書なので同じファイルを指定）

- パスフレーズの設定
コマンド実行後、エクスポート用のパスワード入力を求められます。このパスワードは、.pfxファイルをインポートする際に必要になります。

## 8. .pfxファイルのインポート（Windows）
作成した machineName.pfx をWindowsの証明書ストアにインポートします。
machineName.pfx をダブルクリックし、「証明書のインポート ウィザード」を開く。
「ローカルコンピューター」を選択し、「次へ」。
「パスワードの入力」画面で、先ほど設定したパスワードを入力。
証明書の保存場所を選択（例：「個人」または「信頼されたルート証明機関」）。
「完了」をクリックしてインポート。

## 9. ローカルホスト名の設定
証明書の「Common Name」や「Subject Alternative Name」が正しく解決されるように、machineName.domain.com をローカルで解決できるように設定します。

- ターゲットPCのIPアドレスを確認
コマンドプロンプトを開き、以下のコマンドを実行してターゲットPCのIPアドレスを確認します：

```bash
ipconfig
```

出力の中から「IPv4 Address」を確認し、そのIPアドレス（例：192.168.1.100）をメモします。

- hosts ファイルを編集
hosts ファイルは以下の場所にあります。
```makefile
C:\Windows\System32\drivers\etc
```
hosts ファイルに新しいエントリーを追加。
```text
192.168.1.100 machineName.domain.com
```

192.168.1.100 はターゲットPCのIPv4アドレスで、machineName.domain.com は使用したいドメイン名です。

- DNSキャッシュのクリア
変更を反映させるために、以下のコマンドをコマンドプロンプトで実行してDNSキャッシュをクリアします。

```bash
ipconfig /flushdns
```

## 10. 疎通確認
ping コマンドで確認します。hosts ファイルの設定が正しく反映されているか確認するため、以下のコマンドを実行します：

```bash
ping machineName.domain.com
```

名前解決が正しく行われれば、設定が完了です。

## まとめ
以上の手順で、Windows 10で自己署名証明書を作成し、.pfx形式でインポートする方法が完了しました。必要に応じて、各手順での詳細設定を変更することができます。