Horizonで自己証明書を設定する方法

HorizonでVDI環境を構築したときに
Connection Serverのデフォルトサーバ証明書は期間が1年となっているため
自己証明書(オレオレ証明書)を作成して設定した手順の備忘として残しています。



以下の記事を参考にさせていただきました。

https://qiita.com/makoto1899/items/ef15372d4cf4621a674e

CAはそのまま作成

```
cd /etc/ssl/hogeCA
```
証明書の期間は２０年で作成する
CA証明書作成 -daysで期間指定する　7300日=20年
```
/etc/ssl/hogeCA# openssl req -new -x509 -newkey rsa:2048 -out cacert.pem -keyout private/cakey.pem -days 7300
```
コモンネームは*.ドメイン名で作成する
他は空白で設定する
```
 Enter PEM pass phrase: *** パスワードを入れる　何でもよい
Country Name: 
State or Province Name: 
Locality Name: hogehoge
Organization Name: 
Organizational Unit Name: )
Common Name: *.test.local (*.ドメイン名で作る)
Email Address: 
```
ファイルが作成されていることを確認
```
/etc/ssl/hogeCA# ls
cacert.pem  certs  crl  index.txt  newcerts  private  serial
```

```
/etc/ssl/hogeCA# cd private/
/etc/ssl/hogeCA/private# ls
cakey.pem
```



サーバ証明書用の作業ディレクトリを作る
```
cd /etc/ssl

/etc/ssl# ls
certs  hogeCA  openssl.cnf  private
/etc/ssl# mkdir server
/etc/ssl# ls
certs  hogeCA  openssl.cnf  private  server
/etc/ssl# cd server/
```

X.509 v3の証明書を作成するために以下の記事を参考にさせていただきました

https://qiita.com/SRsawaguchi/items/f4dc743198e1246fff64

extension fileを作成
```
/etc/ssl# vi v3.txt
```

v3.txtに以下を記入
subjectaltnameはドメインによって異なる
```
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = DNS:*.test.local,DNS:test.local (ドメイン名と*.ドメイン名2ついれる)
```

ファイルを確認する
```
/etc/ssl/server# ls
v3.txt
/etc/ssl/server# cat v3.txt

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = DNS:*.test.local,DNS:test.local
```

秘密鍵の作成
```
/etc/ssl/server# openssl genrsa -out server.key 2048
/etc/ssl/server# ls
server.key  v3.txt
```

CSRの作成
```
/etc/ssl/server# openssl req -new -out server.csr -key server.key

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:*.test.local　(*.ドメイン名) 
						

Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
```
作成したファイルを確認
```
/etc/ssl/server# ls
server.csr  server.key  v3.txt
```

自己認証CA局で署名(CA管理者)
```
openssl x509 -req -in /etc/ssl/server/server.csr -CA /etc/ssl/hogeCA/cacert.pem -CAkey /etc/ssl/hogeCA/private/cakey.pem -CAcreateserial -days 7300 -out server.crt -extfile v3.txt -sha384

Enter pass phrase for /etc/ssl/hogeCA/private/cakey.pem: CA秘密鍵のパスワードをいれる

/etc/ssl/server# ls
server.crt  server.csr  server.key  v3.txt
```

証明書と秘密鍵をまとめてp12形式で保管する。
```
/etc/ssl/server# openssl pkcs12 -export -inkey server.key -in server.crt -out server.pfx
Enter Export Password: パスワードは空白でよい
Verifying - Enter Export Password:

/etc/ssl/server# ls
server.crt  server.csr  server.key  server.pfx  v3.txt
```

作成したserver.pfxに権限付与する　多分読み取りだけでいい？
```
/etc/ssl/server# ls -l
total 20
-rw-r--r-- 1 root root 1375 Apr 22 14:42 server.crt
-rw-r--r-- 1 root root  997 Apr 22 14:41 server.csr
-rw------- 1 root root 1700 Apr 22 14:40 server.key
-rw------- 1 root root 2707 Apr 22 14:43 server.pfx
-rw-r--r-- 1 root root  181 Apr 22 14:40 v3.txt

chmod 777 server.pfx

/etc/ssl/server# ls -l
total 20
-rw-r--r-- 1 root root 1375 Apr 22 14:42 server.crt
-rw-r--r-- 1 root root  997 Apr 22 14:41 server.csr
-rw------- 1 root root 1700 Apr 22 14:40 server.key
-rwxrwxrwx 1 root root 2707 Apr 22 14:43 server.pfx
-rw-r--r-- 1 root root  181 Apr 22 14:40 v3.txt
```

Connectionサーバの証明書変更手順は公式サイトを参照

https://docs.vmware.com/jp/VMware-Horizon/2103/horizon-installation/GUID-5717A5F9-D2E3-4CB7-A0B8-5BBF8F3CBA92.html

対象のConnectionサーバに以下のファイルをコピーする
```
/etc/ssl/server/server.pfx
/etc/ssl/hogeCA/cacert.pem
```
cacert.pemはcacert.crtにリネームする

cacert.crt
証明書をインポートする(コピーしたファイルをダブルクリックでよい)
保存場所はローカルコンピュータ
証明書ストアには信頼されたルート証明機関

server.pfxもダブルクリックする

保存場所はローカルコンピュータ
server.pfxをインポートするときに　このキーをエクスポート可能にするの項目にチェックを入れる
証明書ストアは個人を指定


コントールパネルからコンピュータの証明書の管理を開き
もともとコネクションサーバに適用されていた証明書のフレンドリ名をvdmから別に変える
新しい証明書のフレンドリ名をvdmに設定する

サービスからVmware horizon connectionserverのサービスを再起動する　またはOS再起動

少々待ってログインすると証明書の期間が変更される