Dream Machine Special EditionでSSL証明書を更新する方法

# はじめに
この記事ではUbiquiti Networks社より販売されている[Dream Machine Special Edition](https://jp.store.ui.com/collections/unifi-network-unifi-os-consoles/products/dream-machine-se)(以降、UDM-SE)を使って、SSL証明書の更新方法をまとめています。
毎回下記が表示されるのも面倒ですしね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1675077/e56ede3d-a334-995e-3ee6-348c30aefb86.png)
公式ではやり方のドキュメントがなく、コミュニティでは正しいやり方がまとまってなかったり、そもそもコミュニティは英語メインなので情報が見つけづらかったりするので日本語ベースでまとめて、誰かの役に立てばと思います。



# 事前準備
全部を手取り足取り説明すると大変なので、下記が出来ていることを条件としています。
1. UDM-SEの初期セットアップが完了している。
1. UDM-SEにSSHを利用して接続することが出来る。
1. SSL証明書を発行することが出来る。
1. CAの役割をさせるサーバの証明書を「信頼できるルート証明機関」にインポートされていること。



# 手順
## 証明書の発行
証明書の発行をしていきます。
今回は[.pfx]ファイルを利用していきます。
私はADサーバを構築し、AD CSに証明書要求をしています。


## UDM-SEへのSSH接続
コマンドプロンプトでもPowerShellでもTeraTermでもいいですが、UDM-SEにSSH接続をします。
私はTeraTermを使います。

ユーザー名はroot、パスワードは任意のものを利用してください。
UniFi OSでSSHのパスワードを変更することも出来ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1675077/58a66c19-ea6a-7b09-eb26-e0f833e6ae1b.png)



## 証明書の配置
### 証明書の場所の確認
既存の証明書は下記の保存されています。
```
/ssd1/.data/unifi-core/config/
```

lsコマンドでディレクトリを覗くとこんな感じです。
```
root@UDM-SE:~# ls -la /ssd1/.data/unifi-core/config/
total 68
drwxr-xr-x 2 root root 4096 Jun 24 08:59 ./
drwxr-xr-x 8 root root 4096 Jun 24 09:03 ../
-rw-r--r-- 1 root root  103 Jun 21 03:14 apps.availableUpdates.yaml
-rw-r--r-- 1 root root  155 Jun 16 00:17 apps.userPrefs.yaml
-rw-r--r-- 1 root root 3323 Jun 16 00:25 cloud.yaml
-rw-r--r-- 1 root root 2203 Jun 24 09:12 firmware.yaml
-rw-r--r-- 1 root root   73 Jun 16 00:25 jwt.yaml
-rw-r--r-- 1 root root  554 Jun 24 00:39 settings.yaml
-rw-r--r-- 1 root root 5688 Jun 16 00:25 unifi-core-direct.crt
-rw-r--r-- 1 root root 1702 Jun 16 00:17 unifi-core-direct.key
-rw------- 1 root root 2371 Jun 24 08:53 unifi-core.crt
-rw------- 1 root root 1977 Jun 24 08:52 unifi-core.key
root@UDM-SE:~#
```

- unifi-core.crt
- unifi-core.key

この2つが今回のターゲットです。この証明書と鍵を作製した証明書と置き換えていきます。



### 証明書の転送

SSHの接続元からUDM-SEに向けてSCPで証明書を転送します。
TeraTermなら比較的簡単に出来ます。
ファイル(F)からSSH SCP...を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1675077/3fa9497e-32d1-55ce-8690-f2fc135fe8b9.png)

Fromは任意のディレクトリの[.pfx]ファイルを指定します。
Toには証明書を配置する場所を指定しておきます。
別にtmpディレクトリでもいいです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1675077/b90c095e-f3c7-d5fb-a3bb-1df966d30dd3.png)

転送が出来たらlsコマンドで再度確認してみましょう。

```
root@UDM-SE:~# ls -la /ssd1/.data/unifi-core/config/
total 68
drwxr-xr-x 2 root root 4096 Jun 24 08:59 ./
drwxr-xr-x 8 root root 4096 Jun 24 09:03 ../
-rw-r--r-- 1 root root 4543 Jun 23 22:08 sample.pfx
-rw-r--r-- 1 root root  103 Jun 21 03:14 apps.availableUpdates.yaml
-rw-r--r-- 1 root root  155 Jun 16 00:17 apps.userPrefs.yaml
-rw-r--r-- 1 root root 3323 Jun 16 00:25 cloud.yaml
-rw-r--r-- 1 root root 2203 Jun 24 09:12 firmware.yaml
-rw-r--r-- 1 root root   73 Jun 16 00:25 jwt.yaml
-rw-r--r-- 1 root root  554 Jun 24 00:39 settings.yaml
-rw-r--r-- 1 root root 5688 Jun 16 00:25 unifi-core-direct.crt
-rw-r--r-- 1 root root 1702 Jun 16 00:17 unifi-core-direct.key
-rw------- 1 root root 2371 Jun 24 08:53 unifi-core.crt
-rw------- 1 root root 1977 Jun 24 08:52 unifi-core.key
```
sample.pfxが配置できていますね。



### ファイルのバックアップ

既存の証明書ファイルのバックアップを取ります。
まず、証明書ファイルのあるディレクトリに移動します。
```
cd /ssd1/.data/unifi-core/config/
```
その後、ファイルをバックアップします。
crtとkeyファイルを両方ともバックアップします。
```
mv unifi-core.crt unifi-core.crt.bak
mv unifi-core.key unifi-core.key.bak
```

lsコマンドで確認したら完了です。
```
root@UDM-SE:~# ls -la
total 68
drwxr-xr-x 2 root root 4096 Jun 24 08:59 ./
drwxr-xr-x 8 root root 4096 Jun 24 09:03 ../
-rw-r--r-- 1 root root 4543 Jun 23 22:08 sample.pfx
-rw-r--r-- 1 root root  103 Jun 21 03:14 apps.availableUpdates.yaml
-rw-r--r-- 1 root root  155 Jun 16 00:17 apps.userPrefs.yaml
-rw-r--r-- 1 root root 3323 Jun 16 00:25 cloud.yaml
-rw-r--r-- 1 root root 2203 Jun 24 09:12 firmware.yaml
-rw-r--r-- 1 root root   73 Jun 16 00:25 jwt.yaml
-rw-r--r-- 1 root root  554 Jun 24 00:39 settings.yaml
-rw-r--r-- 1 root root 5688 Jun 16 00:25 unifi-core-direct.crt
-rw-r--r-- 1 root root 1702 Jun 16 00:17 unifi-core-direct.key
-rw-r--r-- 1 root root 1192 Jun 16 00:17 unifi-core.crt.bak
-rw-r--r-- 1 root root 1702 Jun 16 00:17 unifi-core.key.bak
```



### pfxファイルからcrt,keyファイルを作成する

pfxファイルのままではUDM-SEで証明書として使えないので、crtファイルとkeyファイルに変換していきます。
UDM-SEにはデフォルトでopensslがインストールされているので、opensslコマンドを利用します。

#### pfxファイルからcrtファイルを作成する 

```
openssl pkcs12 -in sample.pfx -clcerts -nokeys -out unifi-core.crt
```

#### pfxファイルからkeyファイルを作成する 

```
openssl pkcs12 -in sample.pfx -nocerts -nodes -out unifi-core.key
```

lsコマンドで確認をします。
```
root@UDM-SE:~# ls -la /ssd1/.data/unifi-core/config/
total 68
drwxr-xr-x 2 root root 4096 Jun 24 08:59 ./
drwxr-xr-x 8 root root 4096 Jun 24 09:03 ../
-rw-r--r-- 1 root root 4543 Jun 23 22:08 sample.pfx
-rw-r--r-- 1 root root  103 Jun 21 03:14 apps.availableUpdates.yaml
-rw-r--r-- 1 root root  155 Jun 16 00:17 apps.userPrefs.yaml
-rw-r--r-- 1 root root 3323 Jun 16 00:25 cloud.yaml
-rw-r--r-- 1 root root 2203 Jun 24 09:12 firmware.yaml
-rw-r--r-- 1 root root   73 Jun 16 00:25 jwt.yaml
-rw-r--r-- 1 root root  554 Jun 24 00:39 settings.yaml
-rw-r--r-- 1 root root 5688 Jun 16 00:25 unifi-core-direct.crt
-rw-r--r-- 1 root root 1702 Jun 16 00:17 unifi-core-direct.key
-rw------- 1 root root 2371 Jun 24 08:53 unifi-core.crt
-rw-r--r-- 1 root root 1192 Jun 16 00:17 unifi-core.crt.bak
-rw------- 1 root root 1977 Jun 24 08:52 unifi-core.key
-rw-r--r-- 1 root root 1702 Jun 16 00:17 unifi-core.key.bak
```

### 再起動
ここまで出来たらほぼ完了です。
UDM-SEをリスタートします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1675077/4065b634-ad3e-3906-f6f0-278d1a17623d.png)
Restartをクリックするか、Turn Offで安全なシャットダウンをしてもいいです。

起動してWebブラウザでアクセスし、上手くいくと下記のようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1675077/fe7ab2d9-528f-2ef4-3422-545bdb77bbfa.png)

ちゃんと接続が保護されるようになりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1675077/3da3a42c-fff3-022f-283b-11e878678957.png)

# 最後に
今回はUDM-SEのSSL証明書更新方法を書いていきました。
毎回思いますが、Ubiquti Networksは安く、性能もいいですが、公式ドキュメントが少ないのが難点ですね。
そもそもそんなに弄らない想定なのかもしれませんけどね。