很多 SSL 問題不是憑證本身失敗,而是檔案格式搞錯、私鑰對不上,或中繼憑證沒帶完整。這篇會把站長最常遇到的憑證檔案與檢測工具一次梳理清楚。
你如果不想每次都只是照著別人的畫面一步一步跟著按,卻不知道自己到底改了什麼,這篇會比較適合你。重點不是讓你背流程,而是讓你下次遇到類似情況時,還知道該怎麼自己判斷。
你會學到什麼
- 分清楚常見憑證格式與它們的用途。
- 學會用 OpenSSL 生成 CSR 和進行格式轉換。
- 知道什麼情況需要轉檔,什麼情況不用多做一步。
- 用工具快速確認憑證是否正確、鏈是否完整。
- 掌握私鑰的安全管理原則。
什麼情況最適合先看這篇
- 剛接手虛擬主機、想自己把網站日常維護做好的人
- 你現在正要處理「SSL 憑證轉檔與檢測工具」這類操作
- 你希望做完之後不只功能能用,連驗證與排錯也有概念
開始前先確認
- 先整理好你手上的憑證檔與私鑰檔。
- 確認目前要裝在哪個服務上(cPanel、IIS、Nginx 等)。
- 變更前先保留原始檔,不要直接覆蓋。
先提醒你一件事
cPanel 很多功能都和網域、目錄、Email、憑證綁在一起,設定前先確認你改的是哪個站。
SSL 憑證檔案全解析
先搞清楚你手上拿到的檔案分別是什麼,這是所有後續操作的基礎。
各格式一覽表
| 副檔名 | 全名 | 內容 | 常用於 |
|---|---|---|---|
.key | Private Key | 私鑰,和 CSR 成對產生 | 所有伺服器 |
.csr | Certificate Signing Request | 憑證簽署請求,提交給 CA | 申請憑證時 |
.crt / .cer | Certificate | 已簽發的主憑證 | Apache、Nginx、cPanel |
.pem | Privacy Enhanced Mail | Base64 編碼的憑證或私鑰 | Linux 系統、Nginx |
.pfx / .p12 | PKCS#12 | 私鑰 + 憑證 + 中繼鏈打包 | Windows IIS |
.ca-bundle | CA Bundle | 中繼憑證鏈 | 搭配 .crt 一起用 |
.der | DER Encoded | 二進位格式的憑證 | Java、部分設備 |
重點觀念: .pem 和 .crt 內容格式通常一樣(都是 Base64),只是副檔名不同。很多時候改副檔名就能用。但 .pfx 和 .der 是完全不同的編碼,需要用 OpenSSL 轉換。
CSR 生成教學
CSR(Certificate Signing Request)是你向憑證商申請 SSL 時必須提交的檔案。它包含你的網域資訊和公鑰。
方法一:在 cPanel 生成 CSR
- 登入 cPanel,在「Security」區塊點擊「SSL/TLS」。
- 點擊「Certificate Signing Requests (CSR)」。
- 填寫以下資訊:
- Key:選擇「Generate a New Key」
- Domains:你的網域名稱(例如
yourdomain.com) - City:城市(例如
Taipei) - State:縣市(例如
Taiwan) - Country:選
TW - Company:公司名稱
- 點擊「Generate」。
- 系統會產生 CSR 內容,複製它提交給憑證商。
注意: cPanel 會同時自動保存對應的私鑰。你可以在「Private Keys」頁面找到它。
方法二:用 OpenSSL 指令生成 CSR
如果你需要更精確的控制,或不在 cPanel 環境中:
openssl req -new -newkey rsa:2048 -nodes -keyout yourdomain.key -out yourdomain.csr
系統會要你依序輸入:
Country Name: TW
State or Province Name: Taiwan
Locality Name: Taipei
Organization Name: Your Company Name
Organizational Unit Name: IT Department(可留空)
Common Name: yourdomain.com
Email Address:(可留空)
執行完會產生兩個檔案:
yourdomain.key— 私鑰,要好好保管yourdomain.csr— 提交給 CA 的請求檔
生成 SAN 憑證的 CSR(多網域)
如果你需要一張憑證覆蓋多個網域:
openssl req -new -newkey rsa:2048 -nodes -keyout multi.key -out multi.csr -config <(
cat << EOF
[req]
default_bits = 2048
prompt = no
distinguished_name = dn
req_extensions = v3_req
[dn]
C = TW
ST = Taiwan
L = Taipei
O = Your Company
CN = yourdomain.com
[v3_req]
subjectAltName = @alt_names
[alt_names]
DNS.1 = yourdomain.com
DNS.2 = www.yourdomain.com
DNS.3 = shop.yourdomain.com
EOF
)
常見格式轉換指令(OpenSSL)
PEM 轉 PFX(給 Windows IIS 用)
openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile ca-bundle.crt
系統會要你設定一組匯出密碼,匯入 IIS 時會需要。
PFX 轉 PEM(從 IIS 搬到 Linux)
# 匯出私鑰
openssl pkcs12 -in certificate.pfx -nocerts -out privateKey.key -nodes
# 匯出憑證
openssl pkcs12 -in certificate.pfx -clcerts -nokeys -out certificate.crt
# 匯出中繼憑證
openssl pkcs12 -in certificate.pfx -cacerts -nokeys -out ca-bundle.crt
CRT 轉 PEM
通常只需要改副檔名,或用指令確認格式:
openssl x509 -in certificate.crt -out certificate.pem -outform PEM
DER 轉 PEM
openssl x509 -inform der -in certificate.der -out certificate.pem
PEM 轉 DER
openssl x509 -outform der -in certificate.pem -out certificate.der
合併憑證和中繼鏈為單一 PEM
某些服務(如 Nginx)需要把主憑證和中繼鏈合併成一個檔案:
cat certificate.crt ca-bundle.crt > fullchain.pem
順序很重要: 主憑證在前,中繼憑證在後,Root CA 在最後(通常不需要放)。
憑證驗證指令
轉檔完或設定完,一定要驗證。以下指令幫你確認每個檔案是否正確。
查看憑證資訊
openssl x509 -in certificate.crt -text -noout
這會顯示:發行者、有效期限、網域名稱(CN 和 SAN)、加密演算法等。
確認私鑰與憑證是否配對
# 取得憑證的 modulus hash
openssl x509 -noout -modulus -in certificate.crt | openssl md5
# 取得私鑰的 modulus hash
openssl rsa -noout -modulus -in privateKey.key | openssl md5
# 取得 CSR 的 modulus hash
openssl req -noout -modulus -in certificate.csr | openssl md5
三組 hash 必須一樣。 如果不一樣,代表私鑰和憑證不是同一對,設定上去一定會出錯。
檢查憑證到期日
openssl x509 -enddate -noout -in certificate.crt
遠端檢查網站的 SSL 狀態
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com
這會顯示完整的 SSL 交握資訊,包含憑證鏈、協議版本、加密套件。
私鑰安全管理
私鑰是整個 SSL 安全的核心。如果私鑰洩漏,加密形同虛設。
私鑰管理原則
- 永遠不要用 Email 傳送私鑰。 如果必須傳送,使用加密壓縮(7z + 密碼)。
- 不要把私鑰放在
public_html或任何網頁可存取的目錄。 - 設定正確的檔案權限:
chmod 600 privateKey.key(只有擁有者可讀寫)。 - 換主機或人員離職時,重新產生 CSR 和私鑰。 不要沿用舊的。
- 備份私鑰時加密保存。 可用
openssl rsa -aes256 -in plain.key -out encrypted.key。
如果私鑰疑似洩漏
- 立刻到憑證商後台「Revoke」(撤銷)目前的憑證。
- 重新產生 CSR 和私鑰。
- 用新的 CSR 重新申請憑證。
- 部署新憑證到伺服器。
線上檢測工具
SSL Labs(最推薦)
Qualys SSL Labs 是業界標準,它會為你的網站安全性評分(A+ 為最高分)。
評分會檢查的項目:
- 憑證有效性與信任鏈
- 支援的 TLS 版本(TLS 1.2 / 1.3)
- 加密套件強度
- 是否有已知漏洞(Heartbleed、POODLE 等)
- HSTS 設定
侃瑞科技的虛擬主機已預設關閉不安全協議(TLS 1.0 / 1.1),你通常可以輕鬆拿到 A 以上的評分。
SSL Checker
SSL Shopper 能快速診斷你的中繼憑證(CA Bundle)是否漏裝。如果結果顯示鏈不完整,代表你需要補上中繼憑證。
Why No Padlock?
Why No Padlock? 專門用來找出為什麼你的網址列沒有顯示鎖頭。通常原因是 Mixed Content(混合內容),可以搭配 SSL 憑證設定教學 的 mixed content 排查段落一起看。
Certificate Decoder
SSL Shopper Decoder 讓你貼上憑證內容(PEM 格式),就能看到完整的憑證資訊,不需要用指令。
Troubleshooting
「SSL certificate problem: unable to get local issuer certificate」
原因: 中繼憑證(CA Bundle)沒裝完整。 解法: 在 cPanel 的 SSL/TLS → Manage SSL Sites 中,確認 CA Bundle 欄位有填入完整的中繼憑證鏈。
SSL Labs 評分只有 B
原因: 通常是伺服器還支援 TLS 1.0 或 1.1。 解法: 侃瑞科技的主機已預設關閉舊協議。如果你是自架 VPS,需要在 Apache 或 Nginx 設定中關閉。
瀏覽器顯示「NET::ERR_CERT_COMMON_NAME_INVALID」
原因: 憑證的網域名稱和你實際訪問的網域不符。 解法: 確認憑證的 CN 或 SAN 包含你的網域(含 www 和裸網域)。
私鑰和憑證 modulus 不一致
原因: 你用了不同次產生的私鑰和 CSR。 解法: 必須重新產生 CSR(用正確的私鑰),然後重新申請憑證。
轉換 PFX 時出現「unable to load private key」
原因: PFX 檔案的匯出密碼不對,或檔案損壞。 解法: 確認密碼正確。如果是從 Windows 匯出的,重新匯出一次並記住密碼。
做完後怎麼確認自己真的有設對
- 用
openssl x509 -text -noout -in certificate.crt確認憑證網域和效期。 - 用 modulus 比對確認私鑰和憑證配對。
- 到 SSL Labs 跑一次完整檢測。
- 用不同裝置(手機、平板)訪問確認鎖頭正常。
- 如果是轉檔,在目標伺服器上實際部署後再確認。
這一題最常踩的坑
- 把不同網站的私鑰與憑證混在一起。
- 只看瀏覽器鎖頭,不檢查中繼鏈。
- 轉檔後不驗證內容,之後很難知道是哪一步出錯。
- 私鑰放在可公開存取的目錄。
- 合併 PEM 時順序放反,導致某些客戶端無法驗證。
如果你要往下一步走
如果你是要實際把站切到 HTTPS,可以回頭搭配 cPanel SSL 憑證設定教學 一起看。如果你不想自己處理這些繁瑣的憑證管理,侃瑞科技提供 SSL 全程代管,從申請、設定到續約全部幫你搞定。如果你想把這些功能直接用在穩定環境,侃瑞的 cPanel 虛擬主機方案 可以直接對照本文操作。