Files
106_105_181_70/ssl_deploy_guide.md
Timmy 87234b458a docs: 重構 SSL 憑證管理為完整 SOP
- tmp/ 重命名為 ssl_certs/,存放憑證相關檔案
- ssl_deploy_guide.md 改寫為 8 步驟標準作業流程
- .gitignore 排除私鑰與 fullchain 等敏感檔案

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 10:19:23 +08:00

132 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# SSL 憑證部署 SOP - tpesupporter.tpech.gov.tw
## 概述
hospital_web (106.105.181.70) 使用 Nginx Proxy Manager 管理 SSL。
憑證檔案存放於本機 `ssl_certs/` 目錄,部署目標為遠端 `/opt/php/data/custom_ssl/npm-1/`
## 目錄結構
```
ssl_certs/
├── *.cer # 伺服器憑證GCA 發給你的 zip 解開後的檔案)
├── GCA_G3_intermediate.pem # 中繼憑證(已下載好)
├── privkey.pem # 私鑰(申請憑證時產生,需自行放入)
└── fullchain.pem # 組合後的完整憑證鏈SOP 步驟 3 產出)
```
---
## SOP 流程
### 步驟 1取得憑證
從 GCA 收到的 zip 檔解壓後,將 `.cer` 放入 `ssl_certs/`
```bash
cd ssl_certs/
unzip XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.zip
```
### 步驟 2放入私鑰
將申請 GCA 憑證時產生的私鑰放入 `ssl_certs/privkey.pem`
確認金鑰與憑證配對:
```bash
# 兩個 md5 必須一致
openssl rsa -in privkey.pem -modulus -noout | md5sum
openssl x509 -in *.cer -modulus -noout | md5sum
```
### 步驟 3下載中繼憑證如需更新
中繼憑證已放在 `ssl_certs/GCA_G3_intermediate.pem`
若需重新下載URL 來自憑證 AIA 欄位):
```bash
curl -o IssuedToThisCA.p7b http://gca.nat.gov.tw/repository/Certs/IssuedToThisCA.p7b
openssl pkcs7 -in IssuedToThisCA.p7b -inform DER -print_certs -outform PEM -out GCA_G3_intermediate.pem
rm IssuedToThisCA.p7b
```
### 步驟 4組合 fullchain.pem
```bash
# 憑證轉 PEMDER 格式自動轉換PEM 格式直接複製)
openssl x509 -in *.cer -inform DER -out server.pem 2>/dev/null \
|| cp *.cer server.pem
# 合併:伺服器憑證 → 中繼憑證
cat server.pem GCA_G3_intermediate.pem > fullchain.pem
rm server.pem
```
### 步驟 5備份遠端舊憑證
```bash
ssh hospital_web "sudo cp -r /opt/php/data/custom_ssl/npm-1 /opt/php/data/custom_ssl/npm-1.bak.\$(date +%Y%m%d)"
```
### 步驟 6上傳並替換
```bash
scp fullchain.pem hospital_web:/tmp/
scp privkey.pem hospital_web:/tmp/
ssh hospital_web "
sudo cp /tmp/fullchain.pem /opt/php/data/custom_ssl/npm-1/fullchain.pem
sudo cp /tmp/privkey.pem /opt/php/data/custom_ssl/npm-1/privkey.pem
rm /tmp/fullchain.pem /tmp/privkey.pem
"
```
### 步驟 7重啟 NPM
```bash
ssh hospital_web "cd /opt/php && sudo docker compose restart app"
```
### 步驟 8驗證
```bash
ssh hospital_web "echo | openssl s_client -connect localhost:443 \
-servername tpesupporter.tpech.gov.tw 2>/dev/null \
| openssl x509 -noout -dates -subject -issuer"
```
預期結果:
- `issuer` → 政府憑證管理中心 - G3
- `notAfter` → 新憑證到期日
檢查憑證鏈是否完整:
```bash
ssh hospital_web "echo | openssl s_client -connect localhost:443 \
-servername tpesupporter.tpech.gov.tw 2>&1 \
| grep 'Verify return code'"
```
預期:`Verify return code: 0 (ok)`
---
## 替代方案:透過 NPM 管理後台
1. `ssh hospital_web`(自動建立 port forwarding
2. 瀏覽器開啟 `http://localhost:8181`
3. SSL Certificates → Add SSL Certificate → Custom
4. 貼上 `fullchain.pem` 內容Certificate
5. 貼上 `privkey.pem` 內容Certificate Key
6. 儲存後套用至對應的 Proxy Host
---
## 憑證歷史紀錄
| 期間 | 簽發者 | 到期日 | 備註 |
|---|---|---|---|
| 2025-04 ~ 2026-04 | HiPKI OV TLS CA - G1中華電信 | 2026-04-23 | 憑證鏈不完整,缺中繼 CA |
| 2026-04 ~ 2028-04 | 政府憑證管理中心 - G3GCA | 2028-04-01 | 待部署,私鑰待確認 |