当前位置: 首页 > 面试题库 >

将证书链添加到p12(pfx)证书

施喜
2023-03-14
问题内容

我在java和cxf中有一个用客户端证书连接到WebServices的应用程序。

我从WebService所有者那里获得了证书

  • 证书
  • 证书
  • certificate.crt
  • Trusted_ca.cer
  • root_ca.cer

我直接将这个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:Forbidden’

但是,如果我将此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.jks连接到WebService。

我发现原始的certificate.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 [
  Dihtml" target="_blank">gitalSignature
  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:


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

因此,要解决我的问题,我需要拥有带有可信任CA证书链的p12证书。我可以通过将p12导入IE,然后通过“在证书路径中包括所有证书”将其导出回来来实现。

不使用IE使用keytool或其他工具怎么办?

巴里


问题答案:

自己回答。

我想出了如何使用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中有应用程序,它通过客户端证书连接到Web服务。 我有WebService所有者的证书 证书。p12 证书。pem 证书。crt 受信任的核证机关 根癌 我无法直接将此p12证书转换为java要求的工作jks密钥库。 我是这样做的: 但是这个jks不工作,我得到HTTP响应403:禁止使用这个certificate1.jks 但是,如果我将此p12(pfx)证书导入Intern

  • 问题内容: 我的文件带有证书链-certificate.cer: 我需要将此证书链添加到密钥库。 我做的事: 结果,我在密钥库中只有1个证书。 但是应该有3. 什么地方可能出问题? 解决方案: CA向我发送了PKCS#7格式的证书。 我将它们存储在certificate.p7b文件中,然后通过以下命令将它们成功添加到密钥库中: 问题答案: 从keytool管理员中-如果以PKCS#7格式输入,它将

  • 我有一个当地的库伯内特斯环境,我基本上是复制的。将kube/config文件添加到我的本地文件中,并将“上下文”、“用户”和“集群”信息添加到我当前的“.kube/config”文件中。没关系,我可以连接到本地文件。 但是我想用命令将这些信息添加到我的本地配置文件中。 因此,关于这个页面,我可以使用“证书颁发机构数据”作为参数,如下所示:--- 但它会抛出如上所述的错误。我用的是kubernete

  • 万事达卡使用两条腿的OAuth。在准备OAuth负载之后,我将其添加到授权密钥中的头中。然后,请求需要与证书一起发送。我在这一步出错了。 我已经根据上提供的示例代码编写了代码https://developer.mastercard.com/portal/display/api/Locations-示例代码 和示例密钥可在https://developer.mastercard.com/portal

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

  • 我最近升级了Inteliij IDEA 2019.2,如果我尝试从IDE中提取Git,我会发现以下错误:无法访问'https://github.xxx.com/app-Hello-USD/DGS.git/“:SSL证书问题:证书链中的自签名证书。 有人能帮我什么选项,我必须启用。 谢谢