2016-10-19 78 views
1

对不起,打开同一主题的另一个问题,但我认为这个子问题将湮没other one淹没。安装,以避免PKIX路径建设失败的错误

我遇到了上述错误消息,这是相当不确定的(至少对我而言)。调试输出显示证书已加载,然后仅显示提到的错误。我使用自己的CA链生成了测试证书: CA - > SubCA - > ClientCert

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

我使用这些命令生成我的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文件在我的密钥库的使用方法:

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

我通过调用我的脚本做两次,一次对于服务器和一次为客户端。我们称它们为client.cert和server.cert,即使客户端/服务器令人困惑,因为它们都是本地协议端点。

我然后使用这些命令来产生用于客户端和服务器的信任和密钥库:

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 } before(somefile.p12)

所以现在我有一个CA和SubCA的信任库和PKCS12令牌的密钥库。 Truststore在客户端和服务器端是相同的,Token几乎相同,但有不同的密钥对,因为它们每次都会生成。

的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 

有没有在我的理解一些基本的缺陷?再次,抱歉发布两个问题,但我开始相信我以更基本的方式做错了事。谢谢!

回答

1

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

产生的原因:sun.security.validator.ValidatorException:扩展的关键 用法不允许用于TLS服务器身份验证

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

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

非常感谢!

相关问题