簡體   English   中英

哪個cacert正在使用?

[英]which cacert is in use?

我有一個來自供應商的示例命令行java應用程序; 它取決於SSL身份驗證。 我有供應商的證書,我可以在我的java 7 cacerts文件中看到它們(windows,c:\\ program files \\ java \\ jdk1.7.0_07 \\ jre \\ lib \\ security \\ cacerts)。 如果我打開java 8 cacerts文件,它們就不存在了(c:\\ program files \\ java \\ jre1.8.0_66 \\ lib \\ security \\ cacerts)

如果我設置一個路徑,以便java 8是第一個,程序就可以工作。 如果我更改路徑以便首先使用java 7,則程序將失敗並出現認證錯誤:

C:\project\tryCerts\Demo2>path=c:\program files\java\jdk1.7.0_07\bin;c:\program files\java\jre1.8.0_66\bin


C:\project\tryCerts\Demo2>java -jar vendorCmd.jar user1 password2 environment3
Dec 22, 2015 11:11:35 AM [com.sun.xml.ws.policy.jaxws.PolicyConfigParser]  parse
INFO: WSP5018: Loaded WSIT configuration from file: jar:file:/C:/project/tryCerts/Demo2/vendorCmd/dist/vendorCmd.jar!/META-INF/wsit-client.xml.
Unable to log in: com.sun.xml.ws.client.ClientTransportException: HTTP transport error: javax.net.ssl.SSLHandshakeException: sun.security.validator.Va
lidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to re
quested target

C:\project\tryCerts\Demo2>path=c:\program files\java\jre1.8.0_66\bin;c:\program files\java\jdk1.7.0_07\bin

C:\project\tryCerts\Demo2>java -jar vendorCmd.jar acc03\acc03_ws_user accwbS3rv!ceS acc03_p_production
Dec 22, 2015 11:21:34 AM [com.sun.xml.ws.policy.jaxws.PolicyConfigParser]  parse
INFO: WSP5018: Loaded WSIT configuration from file: jar:file:/C:/project/tryCerts/Demo2/vendorCmd/dist/vendorCmd.jar!/META-INF/wsit-client.xml.
logged in
Dec 22, 2015 11:21:35 AM [com.sun.xml.ws.policy.jaxws.PolicyConfigParser]  parse
INFO: WSP5018: Loaded WSIT configuration from file: jar:file:/C:/project/tryCerts/Demo2/vendorCmd/dist/vendorCmd.jar!/META-INF/wsit-client.xml.
Signed Info:org.jcp.xml.dsig.internal.dom.DOMSignedInfo@3f071328
AccountNumber: 279105/ Firstname: null/ LastName: null
AccountNumber: 1005118/ Firstname: null/ LastName: COMPANY1
AccountNumber: 2102765/ Firstname: null/ LastName: COMPANY2
AccountNumber: 2101373/ Firstname: null/ LastName: COMPANY3
AccountNumber: 2119664/ Firstname: null/ LastName: COMPANY4
AccountNumber: 2119668/ Firstname: null/ LastName: ET CETERA

C:\project\tryCerts\Demo2>dir/s cacerts
 Volume in drive C is OS
 Volume Serial Number is 9896-211D
File Not Found

C:\project\tryCerts\Demo2>

這與我期望的完全相反 - 它是具有供應商證書鏈的java 7文件夾中的cacerts文件,以及沒有它的java 8。 然而,在Java 7上運行程序失敗並出現認證錯誤,並且運行8次成功。

任何人都可以告訴我應該尋找什么解釋這個?

要確定正在使用的信任存儲,而不必使用諸如strace (linux)和process explorer (windows)之類的工具,您可以將調試標志-Djavax.net.debug=ssl傳遞給java命令行,該命令行將轉儲所有ssl相關的調試信息(我在原始評論中提到了all信息,但這會給輸出增加更多噪音):

java -Djavax.net.debug=ssl -jar vendorCmd.jar user1 password2 environment3

在調試輸出的前10行中,將是一行:

trustStore is: <path to>cacerts

這表示正在使用的信任存儲。

通過=ssl選項,它還會轉儲所有可信的證書,這些證書將被添加到JVM認為可信的證書列表中。 這可用於驗證您認為在信任庫中的證書是否實際位於信任庫中 - 在這種情況下,您應該能夠在列表中看到供應商的證書。

JSSE參考指南中詳細介紹了javax.net.debug的調試選項的完整列表。

暫無
暫無

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

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