TIBC Spotfire SSL 證書安裝 / HTTPS 設定
TIBCO Spotfire SSL 證書安裝 / HTTPS 設定
大家好,我是 Jayson Chan。在企業內部部署 TIBCO Spotfire Server 時,啟用 HTTPS 加密連線是常見的安全性要求。這篇文章將分享我實際處理一張 PFX 格式 SSL 證書的經驗,並點出最容易忽略的細節——keystore 的 alias。希望透過真實案例與圖文說明,幫助你順利完成 Spotfire 的 HTTPS 設定。
一、SSL 證書的常見格式
在開始之前,先認識一下 SSL 證書的各種檔案格式,因為接下來的操作會用到這些概念。以下是常見的檔案後綴及其說明:
| 檔案後綴 | 檔案類型 | 說明 |
|---|---|---|
| *.DER 或 *.CER | 二進制格式 | 只含有證書資訊,不包含私鑰。 |
| *.CRT | 二進制格式或文本格式 | 只含有證書資訊,不包含私鑰。 |
| *.PEM | 文本格式 | 一般存放證書或私鑰,或同時包含證書和私鑰。*.PEM 如果只包含私鑰,通常會用 *.KEY 作為檔名。 |
| *.PFX 或 *.P12 | 二進制格式 | 同時包含證書和私鑰,且通常有密碼保護。這是 Windows 環境常見的交換格式。 |
二、官方文件參考
TIBCO 官方有詳細的 HTTPS 設定指南,包含自簽憑證、CA 頒發憑證等不同情境:
How to configure HTTPS using self-signed certificate, CA-issued certificate without private key, and CA-issued certificate with private key in TIBCO Spotfire Server
三、實際案例:公司提供 PFX 證書,前人都失敗
這次的任務是要將公司提供的一張 .pfx 格式的 SSL 證書安裝到 Spotfire Server 上。前幾位同事嘗試多次都失敗,最後交給了我。我一開始也以為是 Port 443 沒有開啟的問題,但後來才發現真正的瓶頸在於 alias 設定不正確。
1. 現象
依照官方文件修改了 server.xml 後,重新啟動 Spotfire Server,使用 netstat -an 檢查 443 port 並沒有處於 LISTEN 狀態。瀏覽器連線 https://伺服器 出現「拒絕連線」 (refuse to connect)。這表示 Tomcat 根本沒有成功載入憑證,自然不會監聽 443。
2. 關鍵設定檔:server.xml
Spotfire 的 Web 應用程式設定放在 <Spotfire 安裝目錄>/tomcat/conf/server.xml。HTTPS 的設定區塊大致如下:
<SSLHostConfig certificateVerification="none"
truststoreFile="./certs/cacerts.jks"
truststorePass="your_password"
truststoreType="jks"
sslProtocol="TLS"
protocols="+TLSv1.2,+TLSv1.1,+TLSv1"
honorCipherOrder="true"
ciphers="TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,TLS_DHE_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_RSA_WITH_AES_256_CBC_SHA256,TLS_DHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA,TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,SSL_RSA_WITH_3DES_EDE_CBC_SHA">
<Certificate certificateKeystoreFile="./certs/keystore.p12"
certificateKeystorePassword="your_password"
certificateKeystoreType="PKCS12"
certificateKeyAlias="server_alias" />
</SSLHostConfig>
其中 <Certificate> 區塊的 certificateKeyAlias 就是指定 keystore 中要使用的憑證別名。如果這個別名錯誤,Tomcat 就無法載入私鑰,導致 HTTPS 無法啟動。
四、查出正確的 alias
由於公司並沒有告知這張 PFX 證書內部的 alias 是什麼,而且 CA 產生的 alias 通常是一串看似亂碼的字串(例如 1e:ab:34:...:f2 之類的指紋格式),所以必須用工具查看。
使用 keytool 命令查看 keystore
Java 自帶的 keytool 可以列出 keystore 的內容,包括 alias。指令如下:
"%JAVA_HOME%\bin\keytool" -list -keystore <你的 keystore 檔案.副檔名>
例如,我的 Java 安裝在 C:\Program Files\Java\jdk-14.0.1\bin\keytool,keystore 檔案是 keystore.p12:
"C:\Program Files\Java\jdk-14.0.1\bin\keytool" -list -keystore keystore.p12
執行後會要求輸入密碼(即 PFX 的密碼),接著就會顯示 keystore 內容。請看下圖:
如上圖紅色圈圈處,就是該 keystore 的 alias。圖中的 alias 看起來像是亂碼,若不仔細看很容易忽略。但正是這個 alias 必須填寫到 certificateKeyAlias 屬性中。
五、修正 server.xml 設定
將查到的 alias 填入 <Certificate> 標籤中,例如假設 alias 是 ims(實際可能是亂碼,但此處以簡單名稱舉例):
<Certificate certificateKeystoreFile="./certs/keystore.p12"
certificateKeystorePassword="your_password"
certificateKeystoreType="PKCS12"
certificateKeyAlias="ims" />
存檔後重新啟動 Spotfire Server。這次再檢查 443 port:
netstat -an | find "443"
應該會看到類似 0.0.0.0:443 或 [::]:443 處於 LISTENING 狀態。瀏覽器也能順利使用 HTTPS 連線了。
六、總結
這次經驗讓我深刻體會到,SSL 證書的 alias 是一個非常關鍵卻容易忽略的參數。如果只知道提供 PFX 檔案和密碼,卻不知道內部的 alias,Tomcat 就無法正確取得私鑰。透過 keytool -list 可以輕鬆查看 alias,確保設定正確。
希望這篇文章能幫助到正在為 Spotfire 設定 HTTPS 而苦惱的朋友。如果你有類似的經驗或問題,歡迎留言交流。
參考資料:TIBCO Support Article – How to configure HTTPS ... (連結如上)
本文由 Jayson Chan 原創,轉載請註明出處:https://freecodeinfosite.blogspot.com/
留言
張貼留言