【问题标题】:Import p7b file to Java Keystore using keytool使用 keytool 将 p7b 文件导入 Java Keystore
【发布时间】:2019-01-30 16:42:50
【问题描述】:

我正在尝试将 p7b 文件从第三方导入到 java 信任库。看起来 p7b 包含一个根证书和一个公钥。

我正在尝试使用类似于

的命令导入它
keytool -importcert -file certs.p7b -keystore dave.jks -storetype JCEKS -trustcacerts

当第三方向我提供文件时,他们没有告诉我公钥的别名是什么。

我是否认为在不知道这些信息的情况下无法导入它?

【问题讨论】:

  • p7b/p7c 只能包含证书,不能包含裸公钥。 (Java 密钥库或信任库也不能。)它通常包含形成链的证书:端实体,例如服务器,中间(通常是一个,有时更多),根/锚。但是将链导入依赖信任库是没有意义的;你只需要锚。 p7b/p7c 中的证书没有别名,但 Java 密钥库条目有,因此当您将(一个!)受信任的证书导入到信任库时,您需要选择或默认别名。要查看 p7b 中的内容,请使用 keytool -printcert -file whatever.p7b 或 ...
  • ...如果你有 OpenSSL openssl pkcs7 -print_certs [-text] -in whatever.p7b
  • 谢谢 Dave - 我对证书和公钥之间的区别感到非常不安,所以我很可能混淆了这些术语。您建议的 keytool 命令给出keytool error: java.lang.Exception: Failed to parse input - openssl 命令给出unable to load PKCS7 object 13060:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:701:Expecting: PKCS7。我可以使用 KeyStoreExplorer 实用程序打开文件
  • 那么要么不是 p7,要么不是 PEM。如果您使用文本编辑器查看它,它是否由以-----BEGIN 开头的行组成,然后是几行base64,后跟以-----END 开头的行,如果是这样,BEGIN/END 之后的单词是什么?如果不是文本,即大部分是未显示或“dingbat”字符,请尝试将-inform der 添加到openssl pkcs7 命令。

标签: java keytool


【解决方案1】:

这是一个相当古老的问题。但是我刚刚遇到了同样的问题,所以我会发布我所做的。

我们有一个来自公共机构的 .p7b 文件,该文件持有一个必须在我们的系统中接受的证书链。因为它有证书链,所以不能直接导入p12文件,所以,首先用openssl检查了一下:

 openssl pkcs7 -print_certs -inform der -in file.p7b

此命令提供别名列表和 base64 编码证书:

subject=LONG CERTIFICATE1 COMMONNAME WITH ESCAPE SEQUENCES
issuer=LONG CERTIFICATE1'S ISSUER COMMONNAME
-----BEGIN CERTIFICATE-----
long base64 string
-----END CERTIFICATE-----

subject=LONG CERTIFICATE2 COMMONNAME WITH ESCAPE SEQUENCES
issuer=LONG CERTIFICATE2'S ISSUER COMMONNAME
-----BEGIN CERTIFICATE-----
long base64 string
-----END CERTIFICATE-----

这个列表很长,因为 .p7b 文件包含多个证书。

下一步是复制-----BEGIN CERTIFICATE----------END CERTIFICATE----- 之间的所有片段,并将它们存储在具有.pem 扩展名的不同文件中:

certificate1.pem
certificate2.pem
...

然后将它们导入密钥库,使用长通用名作为别名:

keytool -alias "LONG CERTIFICATE1 COMMONNAME WITH ESCAPE SEQUENCES" -importcert -trustcacerts -file certificate1.pem -keystore trustcerts.p12 -storetype PKCS12
keytool -alias "LONG CERTIFICATE2 COMMONNAME WITH ESCAPE SEQUENCES" -importcert -trustcacerts -file certificate2.pem -keystore trustcerts.p12 -storetype PKCS12

在此之后,我们有了一个包含所有 .p7b 证书的 pkcs12 密钥库。

【讨论】:

  • 但是如何使用这种方法获取证书链呢?
  • 证书包含在p7b 文件中。 openssl 命令通过标准输出返回它们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-30
  • 2017-02-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-02
  • 2021-05-21
  • 1970-01-01
相关资源
最近更新 更多