当前位置: 首页 > 知识库问答 >
问题:

从私钥和CA证书包创建java密钥库

拓拔骁
2023-03-14

我是新来配置Jetty服务器的SSL。我按照digcert的步骤创建了私钥文件、证书请求CSR文件。

我向CA发送了证书请求,并拿回了我签名的CSR。但是CA给我发了一个有两个证书的捆绑包,一个是我的证书,由CA签名,第二个是CA证书。(1star_xyx_abc_comcrt文件,2.CRT文件)。现在我面临着从这些文件创建密钥库的麻烦。

当我按照Oracle文档的步骤4、5和6使用keytool创建密钥库时,我遇到了一个错误

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证书签名?

共有3个答案

傅峰
2023-03-14

我尝试从SSL发行版附加CA证书链和CACERT,并将结果用作CA证书链,结果成功了!

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
东门晟
2023-03-14

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

无论如何:只有在使用Java keytool生成privatekey和CSR时,Oracle页面上的说明才起作用,如步骤1、2、3所述。此外,步骤4和5 6是备选方案;虽然文本不是很清晰,但是你可以做一个或另一个,而不是两个都做——而且只有在做了1,2,3之后。

考虑到您现在的处境,您唯一的选择是将OpenSSL文件转换为pkcs12,然后可能使用keytool将pkcs12转换为JKS。(Java crypto本身可以直接使用pkcs12,但并非所有Java crypto应用程序都可以调用此选项,我不知道Jetty是否可以。)

你说你尝试过这个,但没有给出你所做的细节,但我猜你拥有的“Digicert CA”文件很可能是一个中间CA,而不是根,要获得一个完整的链,你需要添加根。(pkcs12格式实际上并不需要完整的链,因此openssl pkcs12子命令也是如此,但是对于Jetty这样的SSL/TLS来说是非常理想的,因此您应该这样做。)

首先检查您的(直接)CA是什么以及什么DigicertCA。crt带有

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

如果您的证书的发行者与DigicertCA的主题相匹配,并且它们(两者)都包括类似“中间CA”或“SSL CA”的内容,并且DigicertCA的发行者具有“CN”,该“CN”是DigiCert保证ID根CA、DigiCert全球根CA中的任何一个或DigiCert高保证EV Root CA那么你很幸运,只要你(或其他人)没有从Java(JRE)安装中的默认cacerts中删除digicert root。使用keyool-exportcert将该digicert根从JRE/lib/Security/cacerts中的匹配条目复制到文件中。将您的私钥、证书、中间“DigicertCA”证书和适当的根证书连接到一个文件中,并将其提供给openssl pkcs12-导出[-名称任何内容],并将输出导向一个文件,给出一个非空密码。

(其他情况:如果DigicertCA. crt实际上是一个根,并且与证书的发行者匹配,那将是非常奇怪的。如果它是一个根,并且与您的证书颁发者不匹配,您将错过中间的CA证书(甚至可能不止一个);您应该能够从Digicert获得它(它们)。如果它(DigicertCA. crt)匹配您证书的发行者,并且不是根,但它的发行者不是上面提到的根之一,您将需要更多的证书为您的链,但没有更多的数据,我无法建议哪个。)

对于pkcs12文件,请执行以下操作:

keytool -importkeystore -srckeystore p12file -srcstoretype pkcs12 -destkeystore newjksfile
施俊明
2023-03-14

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

1.使用OPENSSL工具创建了一个包含三个文件(私钥文件、我的证书、CA证书)的PKCS12。

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

2.使用Keytool工具从PKCS12创建java密钥库。

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

3.added这个密钥库到服务器,它的工作。

 类似资料:
  • kubernetes 系统各组件需要使用 TLS 证书对通信进行加密,本文档使用 CloudFlare 的 PKI 工具集 cfssl 来生成 Certificate Authority (CA) 证书和秘钥文件,CA 是自签名的证书,用来签名后续创建的其它 TLS 证书。 安装 CFSSL $ wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 $

  • 我试图签署一个Android应用程序,但显然原始的keystore文件是不可用的。我所得到的只有以下几点: 私钥md5 0123456789abcdef0123456789abcdef<--虚构值,但 证书md5 fedcba9876543210fedcba9876543210<-原始为32个十六进制数字 已签署的生产Android应用程序 是否有任何方法可以从这些资产中重新创建一个keystor

  • 本任务将演示将现有的证书和密钥添加到 Istio CA 中。 默认情况下,Istio CA 生成自签名 CA 证书和密钥,并使用它们签署工作负载证书。Istio CA 也可以使用我们指定的证书和密钥来签署工作负载证书。接下来我们将演示将证书和密钥插入 Istio CA 的示例。 开始之前 根据安装指南中的快速入门指南,在 Kubernetes 集群中安装 Istio。 在安装步骤的第四步应该启动身

  • 问题内容: 我的Java程序如何知道包含证书的密钥库在哪里?或者,如何告诉我的Java程序在哪里寻找密钥库? 在以某种方式指定了密钥库之后,如何指定用于对服务器进行身份验证的证书? 问题答案:

  • 问题内容: 我正在寻找一个Java库或代码来即时生成证书,公共和私有密钥,而无需使用第三方程序(例如openssl)。 我认为是从Java代码中获取keytool + openssl的东西。 考虑使用ssl和客户端身份验证保护的基于Java servlet的Web应用程序。我希望Servlet容器仅在请求时使用Java代码生成客户端证书(例如pkcs12格式)。 问题答案: 您可以使用一对或密钥在

  • 因此,我正在通过 SAML2.0 为我们的应用程序实现 SSO。我们正在使用 saml2-js,并且我们正在执行 SP 启动的 SSO。 实现已经准备好了,它正在工作,但是有几个部分我还在纠结。 saml2-js要求您在ServiceProvider实例上提供私钥和证书-