簡體   English   中英

客戶端身份驗證 Tomcat - trustAnchors 參數必須為非空

[英]Client Authentication Tomcat - trustAnchors parameter must be non-empty

我知道這個問題似乎沒有很多stackoverflow,例外是與缺少信任庫有關 - 但這是我的問題:

  1. 在帶有 Java 8.0.71 的 Windows 上使用 Apache Tomcat v7.0.56 作為服務器
  2. 修改了 tomcat/conf/server.xml 以包含 SSL 連接器 truststoreType="PKCS12", truststoreFile="conf/regtomcat.truststore" truststorePass="password"

我啟動了 tomcat,我知道它正在正確讀取此信任庫文件,因為我最初沒有 pkcs12 格式的文件,並且 tomcat 在啟動時報告了錯誤。 我也嘗試破壞文件位置只是為了看到tomcat啟動失敗,因為它找不到文件。 所以 tomcat 啟動正常 - 它正在讀取信任庫,這必須意味着它存在並且可以讀取。

我將一個 p12 文件加載到我的瀏覽器證書中,然后轉到我的應用程序 URL。 然后我得到tomcat錯誤:

handling exception: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: 
the trustAnchors parameter must be non-empty

鑒於我的委托人存在並且包含我的證書 - 問題可能是什么?

我使用 keytool 生成了所有證書和信任庫。 信任庫是使用命令創建的

keytool -importcert -alias regClient -storetype PKCS12 -keystore regtomcat.truststore -file regClient.cer

一個可能的原因可能是,如果我們使用相同的 .jks 文件作為密鑰庫和信任庫,則服務器啟動失敗並出現以下錯誤:java.security.InvalidAlgorithmParameterException:trustAnchors 參數必須為非空。 Keystore 用於存儲 ServerCerts,TrustStore 用於存儲 CA 證書。 在 .jks 中添加至少一個 CA 證書后,上述問題將得到解決。

好的 - 問題是證書是使用 JDK 1.8 創建的,而 tomcat 是使用 JRE 1.7 運行的 - 無論出於何種原因,這都會導致問題,所以修復是使用 JRE 1.8,現在一切正常。

面臨同樣的問題。 我的密鑰庫只有網站的私鑰對。 將公共證書從密鑰對一直導入到根目錄,並且可以正常工作。

面臨同樣的問題。 原因更為基本:.jks 文件必須對於運行 tomcat 服務的帳戶是可讀的。 盡管我們將它作為 systemctl 服務(因此從 root 啟動/停止),但該帳戶是 tomcat,因此 .jks 商店的簡單 chown tomcat:tomcat 完成了這項工作!

對我來說,問題是我將 null 作為密碼傳遞給關鍵字,其中密碼是changeit

ks.load(fis, "changeit".toCharArray());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM