# 申請SSL
使用[certbot](https://certbot.eff.org/)進行申請SSL證書
將certbot安裝在任意一台機器上(windows, linux)
1. 安裝
- Linux Ubuntu
```
$ sudo apt update
$ sudo apt install snapd
$ sudo snap install core; sudo snap refresh core
$ sudo snap install --classic certbot
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
```
- Windows
[https://dl.eff.org/certbot-beta-installer-win32.exe](https://dl.eff.org/certbot-beta-installer-win32.exe)
<br>
2. 執行申請證書
- DNS
> 使用條件: 我們有客戶域名的操作控制權
1. `$ certbot certonly --manual --preferred-challenges dns`
執行後輸入要申請證書的域名, 之後會產生一組隨機字串, 並且需要保持當前頁面, 驗證完成後再按下一步
<br>
2. 驗證域名擁有權
1. 到該域名的DNS管理頁面
2. 新增TXT紀錄
3. 紀錄名稱(子域名)為`_acme-challenge`
4. 值為在第2步所產生的隨機字串
5. 結果會如以下
`_acme-challenge.example.com. TXT "gfj9Xq...Rg85nM"`
<br>
3. DNS生效需要一定時間, 回到指令行按下一步確認是否生效
<br>
- http
> 使用條件: 客戶已經將域名指向至他的主機, 並且我們可以ssh進入客戶的主機做操作
1. `$ certbot certonly --manual --preferred-challenges http`
執行後輸入要申請證書的域名, 之後會產生一組隨機字串, 並且需要保持當前頁面, 驗證完成後再按下一步
<br>
2. 在\***客戶**\*的主機, **網站根目錄**`/.well-known/acme-challenge/`下, 放置該指令返回所需要的檔案名稱和檔案內容
<br>
3. 回到指令行按下一步確認是否生效
<br>
> CMS的網站預設根目錄是`/var/lib/cayin/CMS/www`
<br>
3. 申請成功後證書會放在系統的特定路徑下, 會顯示在指令行所返回的訊息
> 路徑範例 `..../live/example.com/`
<br>
4. 我們需要的是`..../archive/域名.com/`底下的證書檔案
- `fullchain1.pem`
- `privkey1.pem`
<br>
> 如果後續還有幫相同的域名申請證書, 後面的編號會遞增, 根據需求選擇特定或是最新的證書檔案
<br>
5. 將證書檔案放置客戶的CMS主機上
6. 更新檔案`/etc/apache2/sites-available/CMS_SSL.conf`
```
SSLCertificateFile /etc/apache2/ssl/fullchain1.pem
SSLCertificateKeyFile /etc/apache2/ssl/privkey1.pem
```
這兩個檔案的路徑指向我們放置的SSL證書的路徑就可以
7. 啟用SSL設定檔`$ sudo a2ensite CMS_SSL`
8. 到`/etc/apache2/sites-enabled/`底下, 應該要看到以下畫面

9. 重新讀取設定檔`$ sudo systemctl reload apache2`使網站https生效
10. 申請完畢後, 為了驗證所建立的檔案或是DNS紀錄就可以刪除了