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

向p12(pfx)证书添加证书链

乌学博
2023-03-14

我在java和cxf中有应用程序,它通过客户端证书连接到Web服务。

我有WebService所有者的证书

  • 证书。p12
  • 证书。pem
  • 证书。crt
  • 受信任的核证机关
  • 根癌

我无法直接将此p12证书转换为java要求的工作jks密钥库。

我是这样做的:

keytool -importkeystore -srckeystore certificate.p12 -srcstoretype PKCS12 -destkeystore certificate1.jks -deststoretype JKS -storepass secret
keytool -import -alias root -file root_ca.cer -trustcacerts -keystore certificate1.jks -storepass secret
keytool -import -alias trusted -file trusted_ca.cer -trustcacerts -keystore certificate1.jks -storepass secret

但是这个jks不工作,我得到HTTP响应403:禁止使用这个certificate1.jks

但是,如果我将此p12(pfx)证书导入Internet Explorer,然后选择“在证书路径中包含所有证书”复选框并使用以下命令将此证书从IE导出为pfx格式:

keytool -importkeystore -srckeystore certificate.pfx -srcstoretype PKCS12 -destkeystore certificate2.jks -deststoretype JKS -storepass secret
keytool -import -alias root -file root_ca_kir.cer -trustcacerts -keystore certificate2.jks -storepass secret
keytool -import -alias trusted -file trusted_ca_kir.cer -trustcacerts -keystore certificate2.jks -storepass secret

然后一切正常,我可以使用certificate2连接到Web服务。jks。

我发现原始证书. p12(pfx)只包含一个条目(证书链长度: 1):

keytool -list -keystore certificate.p12 -storepass secret -storetype PKCS12 -v


*******************************************
*******************************************

Alias name: alias
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=MyCompany, EMAILADDRESS=my.email@domain.com, O=bla, C=PL
Issuer: CN=Trusted CA, O=ble, C=PL
Serial number: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Valid from: ... until: ...
Certificate fingerprints:
         MD5:  XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX
         SHA1: XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX
         Signature algorithm name: SHA1withRSA
         Version: 3

Extensions:

#1: ObjectId: X.X.XX.XX Criticality=false
KeyUsage [
  DigitalSignature
  Key_Encipherment
]

...

*******************************************
*******************************************

虽然从IE导出的certificate.pfx包含认证路径中的所有证书包含具有第二个可信CA证书的证书链(证书链长度: 2):

keytool -list -keystore certificate.p12 -storepass secret -storetype PKCS12 -v



*******************************************
*******************************************

Alias name: alias
Entry type: PrivateKeyEntry
Certificate chain length: 2
Certificate[1]:
Owner: CN=MyCompany, EMAILADDRESS=my.email@domain.com, O=bla, C=PL
Issuer: CN=Trusted CA, O=ble, C=PL
Serial number: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Valid from: ... until: ...
Certificate fingerprints:
         MD5:  XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX
         SHA1: XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX
         Signature algorithm name: SHA1withRSA
         Version: 3

Extensions:

#1: ObjectId: X.X.XX.XX Criticality=false
KeyUsage [
  DigitalSignature
  Key_Encipherment
]

...

Certificate[2]:
Owner: CN=Trusted CA, O=ble ble ble, C=PL
Issuer: CN=ROOT CA, O=ble ble ble, C=PL
Serial number: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Valid from: ... until: ...
Certificate fingerprints:
         MD5:  XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX
         SHA1: XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX
         Signature algorithm name: SHA1withRSA
         Version: 3

Extensions:


*******************************************
*******************************************

所以,为了解决我的问题,我需要有p12证书和可信CA证书链。我可以通过将p12导入IE,然后使用“在认证路径中包含所有证书”将其导出回来来实现这一点。

我怎么能做到这一点,没有IE使用key工具或其他工具?

巴里

共有2个答案

伍溪叠
2023-03-14

如果您在Windows操作系统中工作,您可以像往常一样通过IIS安装证书,然后打开mmc.exe-

展开证书,如果需要,将CA中的证书添加到“中间证书颁发机构”或“受信任的根证书颁发机构”中。

然后进入“网络托管”,这里必须是你的webSite证书,选择证书,左键点击它,选择导出并按照向导,重要的事情要检查“包含私钥”,包含链上的所有证书,导出所有扩展属性,你必须设置密码,选择输出flie名称,就是这样。现在您有一个证书,上面有完整的链。没有更多的问题与Facebook或类似。

双浩涆
2023-03-14

自己的答案。

我想出了如何使用OpenSSL实现这一点:

openssl pkcs12 -in certificate.p12 -out clientcert.pem -nodes -clcerts
openssl x509 -in trusted_ca.cer -inform DER -out trusted_ca.pem
openssl x509 -in root_ca.cer -inform DER -out root_ca.pem
cat clientcert.pem trusted_ca.pem root_ca.pem >> clientcertchain.pem
openssl pkcs12 -export -in clientcertchain.pem -out clientcertchain.pfx
 类似资料:
  • 问题内容: 我在java和cxf中有一个用客户端证书连接到WebServices的应用程序。 我从WebService所有者那里获得了证书 证书 证书 certificate.crt Trusted_ca.cer root_ca.cer 我直接将这个p12证书转换为java要求的有效jks密钥库时遇到问题。 我这样做: 但是此jks不起作用,使用此证书时我收到HTTP响应‘403:Forbidde

  • 我检查了这个关于正确签名数据的问题,但它没有响应我的SCEP服务器的需求。我使用的代码来自EJBCA,但似乎没有向PKCS7签名数据添加证书。 当我使用工具解析签名数据时,我看到“证书”字段是“空的”。此外,当我尝试使用,我一无所获。 以下是我如何用Bouncy Castle签署我的数据(代码很多,但足以重现问题):

  • 你可以添加 SSH 或 SSL 证书来连接你的实例。若要配置 SSH 或 SSL 证书,请前往“配置”->“SSH 或 SSL 证书”。 添加 SSH 证书 若要创建一个新证书,请点击“+ 新建证书”并选择“SSH 证书”。 名 SSH 证书的名。 私钥 粘贴私钥文件的内容。 添加 SSL 证书 若要创建一个新证书,请点击“+ 新建证书”并选择“SSL 证书”。 名 SSL 证书的名。 CA 证书

  • 我正在尝试以编程方式连接到安全的web服务器。我有用于访问服务器的pfx证书,可以通过浏览器访问它。然而,我得到了以下错误: Java语言安全cert.CertificateException:不存在主题替代名称 我正在使用的这段代码: 我通过将以下内容直接放在openConnection调用之前,设法找到了该错误的解决方法: 只给我: javax。网ssl。SSLHandshakeExcepti

  • 我有一个纯Java的应用程序,目前使用基于. jks的密钥和信任存储。据我所知,Bluemix下的SSL协议处理是在网络端使用单个端口和用于主机和域标识的通配符证书完成的。我关心的是信任存储的使用,在那里我用来添加可信伙伴节点的证书,例如身份提供者。是否有高级上传工具可以帮助安装受信任的证书?有了这些功能,Java可以将其功能限制在非常基本的HTTP实现上,并由云及其在动态端口上发生的HTTP到H