2015-06-17 163 views
4

我是新来配置Jetty服务器的SSL。我按照digcert的步骤创建了私钥文件,证书请求 CSR文件。从私钥和CA证书包创建java密钥库

我向CA发送了证书申请并获得了签名的CSR。但CA向我发送了一个包含两个证书的包,其中一个是我的CA证书,另一个是CA证书(1. star_xyx_abc_com crt文件,2.DigiCertCA crt文件)。现在我面临从这些文件创建密钥库的麻烦。

当我使用密钥工具通过以下步骤Oracle docs 4,5和6来创建密钥库,我得到一个错误

keytool error: java.lang.Exception: Certificate not imported, alias already exists. 

当我用的OpenSSL创建PKCS12

Loading 'screen' into random state - done 
Error unable to get issuer certificate getting chain. 

错误。

如何从私钥文件生成KeyStore,我的证书由CA和CA证书签名?

回答

0

这里是我遵循的步骤来安装证书。

1.Created一个PKCS12使用OPENSSL工具三个文件(私钥文件,我的证书,CA证书)。

openssl pkcs12 -export -out j2vproject.pkcs12 -inkey my_privatekeyfile.key -in star_xyz_abc.crt -certfile DigiCertCA.crt 

2.Created使用使用Keytool工具从PKCS12一个java 密钥库

keytool -v -importkeystore -srckeystore j2vproject.pkcs12 -srcstoretype PKCS12 -destkeystore j2vprojectkeystore.jks -deststoretype JKS 

3.将此密钥库添加到服务器,它工作。

4

旁白:你有证书由CA签名,但证书是签署的CSR。 一些数据中的证书与中的一些中的数据相同,但不是全部。另外我想知道为什么你遵循Apache/OpenSSL的digicert指令而不是Tomcat/Java的指令,这会更简单,因为Jetty也是Java。

无论如何:如果您使用Java keytool生成了私钥和CSR ,则该Oracle页面上的说明仅适用于步骤1,2,3中所述的操作。此外,步骤4和5 + 6是替代品;尽管文本并不尽如人意,但你只能做一个或另一个,而不是两个 - 只有在做了1,2,3之后。

鉴于您现在在哪里,您唯一的选择是将OpenSSL文件转换为pkcs12,然后使用keytool将pkcs12转换为JKS。 (Java加密本身可以直接使用pkcs12,但并不是所有Java加密应用都可以调用此选项,并且我不知道Jetty是否可以)

你说你试过这个,没有提供关于你做什么的细节,但是我猜想最有可能的是你的“Digicert CA”文件不是根,而是为了得到一个完整的链,你需要添加根。 (pkcs12格式实际上并不需要完整的链,因此openssl pkcs12子命令实际上不需要,但对于SSL/TLS(如Jetty)非常有用,因此您应该这样做。)

首先检查你的(即时)CA是,并与

openssl x509 -in $yourcert.crt -noout -issuer 
openssl x509 -in DigicertCA.crt -noout -subject -issuer 

如果您的证书的颁发者DigicertCA,的主题相符,并什么DigicertCA.crt他们(双方)包括像“中间CA “或‘SSL CA’,发行DigicertCA有‘CN’,这是任何DigiCert Assured ID Root CADigiCert Global Root CADigiCert High Assurance EV Root CA然后你走运了,只要你(或其他人)没有删除digicert根(s)从默认的cacerts中你的Java(JRE)安装。使用keytool -exportcert将该digicert根从JRE/lib/security/cacerts中的匹配条目复制到文件中。将您的私钥,证书,中级“DigicertCA”证书和相应的根证书连接到一个文件中,并将其提供给openssl pkcs12 -export [-name whatever]并将输出指向文件,并提供非空密码。 (其他情况:如果DigicertCA.crt实际上是一个根与你的证书的颁发者相匹配,那将是非常奇怪的。如果它是一个根,并且与你的证书的颁发者不匹配,那么你缺少中间的CA证书(或者甚至可能超过一个);你应该能够从Digicert获得它(如果它(DigicertCA.crt)匹配你的证书的发行者,并且不是根,但是它的发行者不是上面提到的根源之一,就需要更多的证书为您的链条,但没有更多的数据,我不能劝哪。)

随着PKCS12文件,请

keytool -importkeystore -srckeystore p12file -srcstoretype pkcs12 -destkeystore newjksfile 
+0

感谢dave_thompsom_085我跟着你的建议,并安装了我的证书。 –

0

我试图从SSL分布中追加CA证书链和cacerts,并将结果作为ca cert链使用并且工作正常!

cat yourCACert.crt /etc/ssl/certs/ca-certificates.crt > fullCAChain.crt 

openssl pkcs12 -export -chain -CAfile fullCAChain.crt -in customercert.cer -inkey customercert.key -out customercert.keystore -name tomcat