尝试将证书添加到密钥库,以便我可以在基于Java的应用程序中使用它。这对我来说是一个新概念。
我有一个网站的.p7b证书,我把一个keytool命令放在一起。当我输入它时,系统会提示我指定一个pwd,然后提示我出现以下错误
keytool error: java.lang.Exception: Input not an X.509 certificate
任何人都可以提供见解吗?
C:\Users\Desktop\>keytool -import -trustcacerts -file "service.site.com - SSL Cert.p7b" -keystore service.site.com.jks
Enter keystore password:
Re-enter new password:
keytool error: java.lang.Exception: Input not an X.509 certificate
答案 0 :(得分:0)
您可以尝试将密钥转换为CER(X509),然后尝试导入它:
openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
即使我尝试导入.pem文件,我也遇到了类似的问题。该文件仅包含humain可读形式的单个证书,并封装在--BEGIN CERTIFICATE--和--END CERTIFICATE--中。在java 7(补丁71)中,keytool无法解析此类文件并抛出了您所获得的相同错误。删除文件的文本部分后:
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 11864724255945479761 (0xa4a7f7d949c31d11)
Signature Algorithm: sha1WithRSAEncryption
Issuer: C=COM, ST=CA, O=Company, OU=ORG, CN=ORG/emailAddress=admin@company.org
Validity
Not Before: Jan 5 15:30:35 2015 GMT
Not After : Jan 2 15:30:35 2025 GMT
它对我来说没用。
请同时查看以下文章(https://myonlineusb.wordpress.com/2011/06/19/what-are-the-differences-between-pem-der-p7bpkcs7-pfxpkcs12-certificates/),因为它解释了各种格式之间的差异,并提供了如何从一种格式转换为另一种格式的命令
答案 1 :(得分:0)
使用keytool导入证书时遇到相同的错误。从Java 6版本开始,对keytool进行了增强:即keytool可以合并和导入PKCS12 format中的keystore。我同意tazarov的回答,您需要转换PKCS#7或P7B格式(基本上以Base64 ASCII格式存储,文件扩展名为.p7b或.p7c)。
在跳入解决方案之前,我认为有必要澄清一些概念。我将从一本优秀的书中引用以下概念:IvanRistić的防弹SSL和TLS版权所有©2015 Feisty Duck Limited。保留所有权利。
PKCS#7证书,一种复杂的格式,设计用于传输已签名或加密的数据,在RFC 2315中定义。通常在 .p7b和.p7c扩展,可以包括整个证书链 如所须。 Java的keytool实用程序支持这种格式。
二进制(DER)证书原始包含X.509证书 格式,使用DER ASN.1编码。
ASCII(PEM)证书包含一个以base64编码的DER证书, 其中----- BEGIN CERTIFICATE -----用作标题,而----- END 证书-----作为页脚。通常只看到一张证书 每个文件,尽管某些程序允许多个证书 取决于上下文。例如,Apache Web服务器要求 服务器证书必须单独存储在一个文件中,所有中间 证书一起在另一个。
解决方案
获取并转换:
openssl s_client -showcerts -connect "service.site.com - SSL Cert.p7b":443 </dev/null 2>/dev/null|openssl x509 -outform PEM >mycertfile.pem
希望有帮助!