【发布时间】: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命令。