Tomcat

將整個證書鏈載入到 Tomcat 7 的密鑰庫中

  • March 3, 2020

環境:Tomcat 7.0 on Windows 2008 R2

要完成什麼

讓 Tomcat 7.0 使用帶有證書鏈的特定萬用字元證書,這樣客戶的瀏覽器就不會拋出錯誤。提供的證書是萬用字元證書。這是不可協商的,與安裝證書無關。

我的問題是除了主證書之外,我無法讓 tomcat 使用鏈(根證書)。

我試過的

起初,我花了很長時間才獲得使用提供的密鑰對的證書。參考文獻 2 和 3 向我展示了將提供的密鑰對導入為 Tomcat 更喜歡的“PrivateKeyEntry”的這些步驟:

#on a CentOS server cuz easier than getting a windows tool for it
openssl pkcs12 -export -in wildcard-customer-2016.crt -inkey wildcard-customer-2016.key -out wildcard-customer-2016.p12 -name wildcard -CAfile rapidssl.crt -caname root

#back on windows
C:\Program Files\Java\jre7\bin\keytool -importkeystore -deststorepass tomcat -destkeystore c:\.keystore -srckeystore c:\certificate\wildcard-customer-2016\wildcard-customer-2016.p12 -srcstoretype PKCS12 -alias wildcard

但我不知道如何添加根證書以便它也使用它。您可以看到我用來建構 .p12 文件的命令包含一個 CAfile 命令。使用“-trustcacerts”執行時的 importkeystore 命令不會添加根證書,儘管它確實適用於 *.customer.com 證書。

可能的替代方案

有人解釋瞭如何配置我server.xml以正確使用 APR。假裝我不知道 zip 文件中的文件去哪裡了。(參考文獻4)

參考

  1. https://tomcat.apache.org/tomcat-7.0-doc/ssl-howto.html
  2. https://stackoverflow.com/questions/906402/importing-an-existing-x509-certificate-and-private-key-in-java-keystore-to-use-i
  3. http://cunning.sharp.fm/2008/06/importing_private_keys_into_a.html
  4. 使用 .key 、.ca 和 .cert 文件為 tomcat 創建 jks

我使用以下步驟來完成此操作

  1. HOSTNAME.key 包含未加密的私鑰
  2. HOSTNAME.cer 包含公共證書 + CA 鏈。

$HOSTNAME 應該是主機的 FQDN(在步驟 2 和 3 中對於別名很重要)。

openssl pkcs12 \
 -export \
 -out   $HOSTNAME.pfx \
 -inkey $HOSTNAME.key \
 -in    $HOSTNAME.cer

然後使用 $HOSTNAME.pfx

keytool -importkeystore \
 -srckeystore   $HOSTNAME.pfx \
 -srcstoretype  pkcs12 \
 -srcstorepass  pazzword \
 -destkeystore  $HOSTNAME.jks \
 -deststoretype JKS \
 -deststorepass pazzword \
 -srcalias      1 \
 -destalias     $HOSTNAME

最後在Tomcat的server.xml中

keystoreFile="/etc/tomcat7/security/$HOSTNAME.jks"
keystorePass="pazzword"
keyAlias="$HOSTNAME"
truststoreFile="/etc/tomcat7/security/mastercert.jks" 
truststorePass="changeit"

最後一部分(信任庫)是如果您需要 Tomcat 信任額外的 CA,那麼您的設置可能不需要。因此,密鑰庫是伺服器證書所在的位置,而信任庫是伺服器將信任的人(以防您想要進行相互身份驗證等)。

引用自:https://serverfault.com/questions/747135