TL;DR: Keytool 拒绝导入有效期少于 1 天的证书
长版:我在使用 keytool 时遇到问题。我正在使用 openssl 创建一个自签名 CA 和 SUBCA 证书链以进行测试,但是稍后将其导入 keytool 时遇到了一些问题。
我正在通过以下方式创建 CA
openssl rand -out ./private/.rand 1024
openssl genrsa -out ./private/cakey.pem -aes256 -rand ./private/.rand 2048
openssl req -days 365 -subj '/C=US/ST=SM/O=Company/OU=Org/CN=ROOT_CA/emailAddress=whatever@whatever.com' -x509 -new -key ./private/cakey.pem -out cacert.pem -config openssl.cnf
然后,我将以与上述完全相同的方式(不同的 CN)创建 SUB_CA 并使用 root ca certfificate 按以下方式对其进行签名
openssl ca -startdate 120524100000Z -enddate 120524101500Z -in ../sub_ca/subcareq.pem -out ../sub_ca/cacert.pem -extensions v3_ca -config openssl.cnf
(注意上面的证书有效期只有15分钟)
直到这里一切都很好。当我尝试将两者都导入 JKS 时会出现此问题。根证书导入没有问题,但 SUB_CA 给出了以下问题
keytool -import -trustcacerts -alias subca -file sub_ca/cacert.pem -keystore keystore.jks
输入密钥库密码:
重新输入新的密码:
keytool 错误:java.lang.Exception:输入不是 X.509 证书
我不明白为什么它一直说它是一个完全有效的证书。如果我更改证书的开始日期和结束日期,而是在签名时给出1 天(-days 1)作为有效期,它会毫无问题地导入 jks。
keytool 是否有某种限制,它只能导入有效期超过 24 小时的 X509 或类似的东西?