【问题标题】:keytool keytool error: java.lang.Exception: Input not an X.509 certificatekeytool keytool 错误:java.lang.Exception:输入不是 X.509 证书
【发布时间】:2014-11-16 23:19:12
【问题描述】:

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

【问题讨论】:

  • 你从哪里得到这个证书?

标签: java ssl jks p7b


【解决方案1】:

您可以尝试将密钥转换为 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/),因为它解释了各种格式之间的差异,并提供了如何从一种格式转换为另一种格式的命令

【讨论】:

    【解决方案2】:

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

    在提出解决方案之前,我认为澄清一些概念是值得的。我将引用一本优秀书籍中的以下概念:Ivan Ristić 的防弹 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
    

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 2013-01-31
      • 1970-01-01
      • 2014-08-16
      • 2023-03-21
      • 2020-12-31
      • 2011-07-09
      • 1970-01-01
      • 2019-01-11
      • 1970-01-01
      相关资源
      最近更新 更多