gpt4 book ai didi

未发送 JavaSSL 相互认证证书

转载 作者:行者123 更新时间:2023-11-28 22:03:01 26 4
gpt4 key购买 nike

我正在开发托管在 Tomcat 中的 Web 应用程序。此应用程序使用需要客户端证书的 SOAP WS(托管在 IIS 上)。我已经设置好一切并准备就绪,但在生产环境中,握手只是不正确。

这里是 javax.net.debug=ssl 输出的相关部分

1) 找到客户端证书和私钥

found key for : authentication service client company2
chain [0] = [
[
Version: V3
Subject: EMAILADDRESS=john.smith@EXAMPLE1.cz, CN=EXAMPLE1, OU=Web Service App, O=My Company, ST=Czech Republic, C=CZ
Signature Algorithm: SHA1withRSA, OID = 1.2.840.113549.1.1.5

Key: Sun RSA public key, 2048 bits
modulus: ......
public exponent: 65537
Validity: [From: Mon Nov 04 17:55:55 CET 2013,
To: Sun Nov 04 17:55:55 CET 2018]
Issuer: EMAILADDRESS=peter.smith@EXAMPLE2.cz, CN=CA, OU=Web Service App, O=My Company, L=Prague, ST=Czech Republic, C=CZ
SerialNumber: [ ...... ]

Certificate Extensions: 4
[1]: ObjectId: 2.16.840.1.113730.1.13 Criticality=false
Extension unknown: DER encoded OCTET string = ......


[2]: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [ ..... ]
]

[3]: ObjectId: 2.5.29.35 Criticality=false
AuthorityKeyIdentifier [
[EMAILADDRESS=peter.smith@EXAMPLE2.cz, CN=CA, OU=Web Service App, O=My Company, L=Prague, ST=Czech Republic, C=CZ]
SerialNumber: [ .... ]
]

[4]: ObjectId: 2.5.29.19 Criticality=false
BasicConstraints:[
CA:false
PathLen: undefined
]

]
Algorithm: [SHA1withRSA]
Signature: .......

]

2) 信任库初始化

trustStore is: ......
trustStore type is : jks
trustStore provider is :
init truststore
...
adding as trusted cert:
Subject: EMAILADDRESS=peter.smith@EXAMPLE2.cz, CN=CA, OU=Web Service App, O=My Company, L=Prague, ST=Czech Republic, C=CZ
Issuer: EMAILADDRESS=peter.smith@EXAMPLE2.cz, CN=CA, OU=Web Service App, O=My Company, L=Prague, ST=Czech Republic, C=CZ
Algorithm: RSA; Serial number: 0x......
Valid from Mon Nov 04 15:35:23 CET 2013 until Sat Nov 04 15:35:23 CET 2023
...

3) 在 WS 服务器端点找到受信任的证书

Found trusted certificate:
[
[
Version: V3
Subject: CN=Thawte SSL CA, O="Thawte, Inc.", C=US
Signature Algorithm: SHA1withRSA, OID = 1.2.840.113549.1.1.5

Key: Sun RSA public key, 2048 bits
modulus: .....
public exponent: 65537
Validity: [From: Mon Feb 08 01:00:00 CET 2010,
To: Sat Feb 08 00:59:59 CET 2020]
Issuer: CN=thawte Primary Root CA, OU="(c) 2006 thawte, Inc. - For authorized use only", OU=Certification Services Division, O="thawte, Inc.", C=US
SerialNumber: [ ..... ]

4) 服务器请求客户端证书

CertificateRequest
Cert Types: RSA, DSS, ECDSA
Cert Authorities:
...
<EMAILADDRESS=peter.smith@EXAMPLE2.cz, CN=CA, OU=Web Service App, O=My Company, L=Prague, ST=Czech Republic, C=CZ>

5) 客户什么都不提供 :-(

ServerHelloDone
Certificate chain

ClientKeyExchange, RSA PreMasterSecret, TLSv1
...

整个过程以 WS 服务器上的 http 403 结束(不提供客户端证书的正确行为),关于握手没有异常(exception)。客户端是wsimport生成的javax.xml.ws.Service。

最让我困惑的是,在开发/测试环境中,完全相同的证书通过得很好(使用完全相同的 trustore 和 WS 客户端)。所以客户端应用程序和证书似乎工作正常。

也许在其他环境中存在一些与 Java 相关的故障,或者我遗漏了什么?

非常感谢任何帮助。经过几天的弄清楚,我在这里有点迷路。

我将附加任何将被要求的相关输入。

谢谢。

附加信息:

  • 尝试通过浏览器访问网络服务导致证书选择对话框。选择后(使用正确的证书),将显示标准页面“当前禁用此服务的元数据发布”

最佳答案

我想通了!

问题是,我正在使用自定义 KeyManagerFactory 根据 SO 上的其他问题(类似于 http://vafer.org/blog/20061010073725/)选择证书。我认为在测试环境中一切正常,因为当我将默认 SSLContext 与我的自定义 KeyManagerFactory 一起使用时,它是第一次初始化。

在生产中,全局 SSLContext(或类似的东西,抱歉我的 JAVA 笨拙)被使用并初始化,然后我的应用程序可以初始化它并插入所需的 key 。所以即使我让 SSLContext 访问 key 对(如上所示,在日志中),它在握手期间也没有使用它。我现在可以通过首先调用其他应用程序在测试环境中重现这一点。

为了解决这个问题,我还设置了 -Djavax.net.keyStore 参数以指向带有客户端 key 对的商店。因此,现在已使用 key 正确初始化了 strore。此解决方法的缺点很明显:在 tomcat 上运行的所有其他应用程序现在都可以访问客户端证书 key 对。我想我可以接受。

关于未发送 JavaSSL 相互认证证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20140392/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com