gpt4 book ai didi

java - 避免 PKIX 路径构建失败错误的设置

转载 作者:太空宇宙 更新时间:2023-11-03 13:15:42 30 4
gpt4 key购买 nike

很抱歉打开另一个相同主题的问题,但我认为这个子问题会使 other one 膨胀被遗忘。

我遇到了提到的错误消息,它非常不具体(至少对我而言)。调试输出显示证书已加载,然后仅显示提到的错误。我用自己的 CA 链生成了测试证书:CA -> SubCA -> ClientCert

我尝试使用 SSL 连接同一台机器上的客户端和服务器(以测试双向协议(protocol))。

我使用这些命令生成我的 ca 证书:

openssl req -batch -x509 -config ${ROOTCA_CONFIG} -newkey rsa:2048 -sha1 -nodes -out ${ROOTCA_CERT} -outform PEM -days 7300 
openssl req -batch -config ${SUBCA_CONFIG} -newkey rsa:2048 -sha1 -nodes -out ${SUBCA_CSR} -outform PEM
openssl ca -batch -config ${ROOTCA_CONFIG} -policy signing_policy -extensions signing_req_CA -out ${SUBCA_CERT} -infiles ${SUBCA_CSR}

他们看起来很好。唯一让我困惑的是:如果将两个证书连接到一个文件中并使用该链验证它们,就可以了。如果它尝试仅与 subCA 或根 CA 进行验证,则验证失败。

然后我创建我的客户端/服务器证书:

openssl req -batch -config ${CLIENT_CONFIG} -newkey rsa:2048 -sha256 -nodes -out ${CLIENT_CSR} -outform PEM -keyout $1.key
openssl ca -batch -config ${SUBCA_CONFIG} -policy signing_policy -extensions signing_req -out ${CLIENT_CERT} -infiles ${CLIENT_CSR}

有了这个,我创建了一个 PKCS12 文件以在我的 keystore 中使用:

openssl pkcs12 -export -inkey ${CONNECTOR_KEY} -in ${CONNECTOR_CERT} -out ${CONNECTOR_P12}

我通过两次调用我的脚本来完成此操作,一次针对服务器,一次针对客户端。我们称它们为 client.cert 和 server.cert,即使客户端/服务器令人困惑,因为它们都是本地协议(protocol)端点。

然后我使用这些命令为客户端和服务器生成信任库和 keystore :

keytool -keystore $2-truststore.jks -importcert -alias ca -file test_ca_certs/rootca.cert
keytool -keystore $2-truststore.jks -importcert -alias subca -file test_ca_certs/subca.cert
keytool -v -importkeystore -srckeystore $1 -srcstoretype PKCS12 -destkeystore $2-keystore.jks -deststoretype JKS

设 $2 分别为客户端和服务器(服务器信任库等),$1 与之前的 ${CONNECTOR_P12} 相同(somefile.p12)

所以现在我有一个带有 CA 和 SubCA 的信任库以及一个带有 PKCS12 token 的 keystore 。客户端和服务器端的 Truststore 相同,Token 几乎相同,但具有不同的 key 对,因为它们是每次生成的。

ssl 调试输出表明证书已加载:

keystore (...) has type [jks], and contains aliases [1].
***
found key for : 1
chain [0] = [
[
Version: V3
Subject: CN=cnname, OU=ouname, O=oname, L=location, ST=bavaria, C=DE
Signature Algorithm: SHA256withRSA, OID = 1.2.840.113549.1.1.11

Key: Sun RSA public key, 2048 bits
modulus: 2999...
public exponent: 65537
...
...
keystore has type [jks], and contains aliases [ca, subca].
adding as trusted cert:
Subject: CN=my Root CA 2016, O=organization, C=DE
Issuer: CN=my Root CA 2016, O=organization, C=DE
Algorithm: RSA; Serial number: 0xfc8239c0355555c1
Valid from Wed Oct 19 10:14:36 CEST 2016 until Tue Oct 14 10:14:36 CEST 2036

adding as trusted cert:
Subject: CN=my SubCA 2016, O=Fraunhofer, C=DE
Issuer: CN=my Root CA 2016, O=Fraunhofer, C=DE
Algorithm: RSA; Serial number: 0x1
Valid from Wed Oct 19 10:14:38 CEST 2016 until Thu Oct 17 10:14:38 CEST 2024

我的理解是否存在一些普遍的缺陷?再次,很抱歉提出两个问题,但我开始相信我以更基本的方式做错了。谢谢!

最佳答案

我终于找到了解决方案。我只将调试设置为 SSL。这是我的错误。我需要将调试输出设置为“全部”。然后我可以看到这个错误信息:

Caused by: sun.security.validator.ValidatorException: Extended key usage does not permit use for TLS server authentication

这更具体。要解决这个问题,确实我需要将我的扩展 key 用法更改为:

keyUsage            = digitalSignature, keyEncipherment, nonRepudiation
extendedKeyUsage = clientAuth, serverAuth

非常感谢!

关于java - 避免 PKIX 路径构建失败错误的设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40133310/

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