创建密钥库时出现“keytool错误:java.lang.NullPointerException:无效的空输入”

问题描述 投票:0回答:1

我正在尝试使用从 Ionos Web 主机下载的更新的 SSL 证书来更新密钥库。

我在他们的 PFX 创建工具中输入我的私钥和密码后下载了 PFX 文件,并选中了“包含中间证书”选项(这是我过去一直做的)。

当我运行 keytool 来更新密钥库时,这是我使用的命令:

keytool -importkeystore -srckeystore example.com_private_key.pfx -srcstoretype pkcs12 -destkeystore mykeystore.jks -deststoretype JKS

它要求我输入一些密码,然后询问我是否要覆盖别名。输入“是”后,它给了我“无效的空输入”错误。

我还尝试创建一个新的密钥库而不是更新旧的密钥库,输入密码后我收到了相同的错误。

我仍然保留着去年的旧 PFX 文件,并且在使用该文件创建密钥库时 keytool 不会给出错误。

我还尝试重新颁发私钥并重新下载带或不带中间证书选项的 PFX,但遇到了相同的错误。

我不知道从哪里开始找出如何克服这个问题。我唯一的假设是新的 PFX 文件有问题,但不知道如何验证它或排除故障。

有什么建议吗?

编辑:

我决定在 PFX 文件上运行 keytool -list,这就是输出

>keytool -list -v -keystore example.com_private_key.pfx
Enter keystore password:
Keystore type: PKCS12
Keystore provider: SUN

Your keystore contains 1 entry

Alias name: *.example.com
Creation date: 22-Mar-2023
Entry type: PrivateKeyEntry


*******************************************
*******************************************

通常这会列出一大堆东西,但这似乎是空的。

java ssl server keytool ionos
1个回答
0
投票

按照@dave_thompson_085的建议,我能够解决这个问题。

导致错误的原因:

来自

Invalid null input
keytool
错误
是由于 PFX 文件在其
friendlyName
属性中缺少
localKeyID
Bag Attributes
造成的。
Bag Attributes
被设置为
<Empty Attributes>
的值,而不是正确的值。

您可以使用 OpenSSLbad PFX 文件中获取信息来检查这一点。

运行:

openssl pkcs12 -info -nokeys -in "C:\example.com_private_key.pfx"

您将得到如下所示的输出:

MAC Iteration 1024
MAC verified OK
PKCS7 Encrypted data: pbeWithSHA1And40BitRC2-CBC, Iteration 1024
Certificate bag
Bag Attributes: <Empty Attributes>
subject=/CN=*.example.com
issuer=/C=US/O=Example CA/OU=www.exampleca.com/CN=Example CA
-----BEGIN CERTIFICATE-----
MIICwDCCAmagAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtjELMAkGA1UEBhMCVVMx
...
...
zYnRrIjp7ImFjdGlvbiI6IlJPTEVfQ09NUExFVEVEIiwicmVwb3NpdG9yeSI6Imh
0dHA6024Ly9leGFtcGxlLmNvbSJ9fSwidGltZXN0YW1wIjoxNTcxMTQxMjg0fQ==
-----END CERTIFICATE-----
Certificate bag
Bag Attributes: <Empty Attributes>
subject=/C=US/O=Example CA/OU=www.exampleca.com/CN=Example CA
issuer=/C=US/O=Example CA/OU=www.exampleca.com/CN=Example CA Root
-----BEGIN CERTIFICATE-----
MIICwDCCAmagAwIBAgIBATANBgkqhkiG9w0BAQUFADA7MQswCQYDVQQGEwJVUzET
...
...
Qnl0ZXMgYW5kIEhhY2thdGhvbi9yZWFsIENBIHRlc3QgaW5zdGFuY2Ugc3lzLg==
-----END CERTIFICATE-----
PKCS7 Data
Shrouded Keybag: pbeWithSHA1And3-KeyTripleDES-CBC, Iteration 1024

您将看到两个证书的

Bag Attributes
的值为
<Empty Attributes>

解决方案:

为了解决此问题,我使用 OpenSSL 手动创建了一个新的 PFX 文件。

首先,从您的 SSL 提供商获取以下文件:

  • 私钥(
    example.com_private_key.key
    )
  • SSL 证书 (
    example.com_ssl_certificate.cer
    )
  • 中级证书(
    example.com_ssl_certificate_INTERMEDIATE.cer
    )

然后使用 OpenSSL 通过运行以下命令来创建新的 PFX 文件:

openssl pkcs12 -export -out "C:\example.com_private_key_fixed.pfx" -name "*.example.com" -inkey "C:\example.com_private_key.key" -in "C:\example.com_ssl_certificate.cer" -certfile "C:\example.com_ssl_certificate_INTERMEDIATE.cer" -caname "Example Certificate Authority Friendly Name"

将属性替换为适当的文件路径和

friendlyName
值。

根据 Dave 的说法,不需要

friendlyName
属性,但我将它们包含在内,因为它们位于我上次工作的 PFX 文件中。

验证您的新 PFX 文件

您可以使用 OpenSSL 来验证

Bag Attributes
是否已正确设置。

运行:

openssl pkcs12 -info -nokeys -in "C:\example.com_private_key_fixed.pfx"

您将得到如下所示的输出:

MAC Iteration 1024
MAC verified OK
PKCS7 Encrypted data: pbeWithSHA1And40BitRC2-CBC, Iteration 1024
Certificate bag
Bag Attributes:
    localKeyID: 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10
    friendlyName: *.example.com
subject=/CN=*.example.com
issuer=/C=US/O=Example CA/OU=www.exampleca.com/CN=Example CA
-----BEGIN CERTIFICATE-----
MIICwDCCAmagAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtjELMAkGA1UEBhMCVVMx
...
...
zYnRrIjp7ImFjdGlvbiI6IlJPTEVfQ09NUExFVEVEIiwicmVwb3NpdG9yeSI6Imh
0dHA6024Ly9leGFtcGxlLmNvbSJ9fSwidGltZXN0YW1wIjoxNTcxMTQxMjg0fQ==
-----END CERTIFICATE-----
Certificate bag
Bag Attributes:
    friendlyName: Example Certificate Authority Friendly Name
subject=/C=US/O=Example CA/OU=www.exampleca.com/CN=Example CA
issuer=/C=US/O=Example CA/OU=www.exampleca.com/CN=Example CA Root
-----BEGIN CERTIFICATE-----
MIICwDCCAmagAwIBAgIBATANBgkqhkiG9w0BAQUFADA7MQswCQYDVQQGEwJVUzET
...
...
Qnl0ZXMgYW5kIEhhY2thdGhvbi9yZWFsIENBIHRlc3QgaW5zdGFuY2Ugc3lzLg==
-----END CERTIFICATE-----
PKCS7 Data
Shrouded Keybag: pbeWithSHA1And3-KeyTripleDES-CBC, Iteration 1024

您将看到

Bag Attributes
现在已正确设置。 PFX 文件现在也应该能够使用
keytool
导入,而不会出现“无效的空输入”错误。

额外信息:

我不知道这是否重要,但是我从网络主机下载的最后一个工作

PFX
文件中的中级证书的 friendlyName 与中级证书的
subject
属性完全相同,但具有斜杠替换为逗号并且顺序相反

所以

`subject=/C=US/O=Example CA/OU=www.exampleca.com/CN=Example CA`

将变成:

`-caname "CN=Example CA,OU=www.exampleca.com,O=Example CA,C=US"`

输入证书颁发机构的

friendlyName
时。

再次强调,

friendlyName
可能并不重要,但我认为值得一提,因为这是我在查看由我的网络主机生成的旧工作PFX文件时注意到的。

谢谢:

再次感谢@dave_thompson_085!刚刚更新了今年的 SSL 证书,但我的网络托管服务商仍然没有解决他们的 PFX 文件问题。只好再次用 OpenSSL DIY 一下。欢呼帮助!

© www.soinside.com 2019 - 2024. All rights reserved.