关键工具 错误:java.lang.Exception: 输入不是X.509证书。

3
尝试将证书添加到密钥库中以便在基于Java的应用程序中使用。这对我来说是一个新概念。
我有一个网站的.p7b证书,并组合了一个keytool命令。当我输入时,我被提示指定密码,然后出现以下错误提示。
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

你从哪里获得了这个证书? - user207421
2个回答

2
你可以尝试将密钥转换为CER(X509)格式,然后尝试导入它:
openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer

我遇到了类似的问题,尽管我试图导入一个.pem文件。该文件仅包含一个证书,既以可读形式呈现,也被封装在“—–BEGIN CERTIFICATE—–”和“—–END CERTIFICATE—–”之间。在Java 7(patch 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/),因为它解释了各种格式之间的区别,并提供了如何从一种格式转换到另一种格式的命令。

0

在使用keytool导入证书时,我也遇到了同样的错误。从Java 6版本开始,keytool增加了一项功能:即keytool可以合并和导入PKCS12格式的密钥库。我同意tazarov的答案,你需要将PKCS#7或P7B格式转换为(基本上存储在Base64 ASCII格式中并带有.p7b或.p7c扩展名的)格式。

在介绍解决方案之前,我认为值得澄清一些概念。我将引用来自Ivan Ristić的优秀著作Bulletproof SSL and TLS Copyright © 2015 Feisty Duck Limited. All rights reserved.中的以下概念:

PKCS#7证书:一种复杂的格式,用于传输签名或加密数据,定义在RFC 2315中。通常以.p7b和.p7c扩展名出现,并且可以根据需要包含整个证书链。该格式由Java的keytool工具支持。
二进制(DER)证书:包含使用DER ASN.1编码的X.509证书的原始格式。
ASCII(PEM)证书:包含经过base64编码的DER证书,其中-----BEGIN CERTIFICATE-----被用作头部,-----END CERTIFICATE-----被用作尾部。通常每个文件只有一个证书,尽管某些程序根据上下文允许多个证书。例如,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

希望能对你有所帮助!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接