keytool keytool error:java.lang.Exception:输入不是X.509证书

时间:2014-09-22 21:31:54

标签: java ssl jks p7b

尝试将证书添加到密钥库,以便我可以在基于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

2 个答案:

答案 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

希望有帮助!