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
次に、上記とまったく同じ方法で SUB_CA を作成し (別の CN)、次の方法でルート CA 証明書で署名します。
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 しかインポートできないなどの制限がありますか?