我正在尝试接受我的SSL证书进行API测试。 为此,我用IE导出我的证书(第二个选项:x.509二进制编码基础64(* .cer) 我使用此命令行在密钥库中添加了它:
keytool -importcert -file certificate.cer -keystore "C:\Program
Files\Java\jdk1.8.0_111\jre\lib\security\cacerts" -alias "certificatealias"
要列出密钥库并检查我是否有证书条目,我使用以下命令行:
keytool -list -v -keystore "C:\Program
Files\Java\jdk1.8.0_111\jre\lib\security\cacerts" > java_cacerts.txt
我的证书条目在里面:
Nom d'alias:certificatealias Datedecréation:6déc。 2016年类型 d'entrée:trustedCertEntry
Propriétaire:CN = Test,O = Test Emetteur: CN =测试,O =测试Numérodesérie:XXXX Valide du:xxx au:xxxx
Empreintes du certificat:MD5:Xxxxxx SHA1:xxxx SHA256: XXXX
Nom de l'algorithme de signature:SHA256withRSA Version:3
在我的代码中,我有:
FileInputStream in = new FileInputStream("certificate.jks");
BufferedInputStream bis = new BufferedInputStream(in);
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
ks.load(bis, "changeit".toCharArray());
Enumeration<String> aliases = ks.aliases();
while (aliases.hasMoreElements()) {
String alias = aliases.nextElement();
System.out.println("alias: " + alias);
System.out.println("bis.available: " +bis.available());
System.out.println("bis: "+ bis.toString());
CertificateFactory cf = CertificateFactory.getInstance("X.509");
X509Certificate x509 = (X509Certificate) cf.generateCertificate(bis);
KeyStore.Entry newEntry = new KeyStore.TrustedCertificateEntry(x509);
ks.setEntry("certificatealias", newEntry, null);
}
我收到了一个错误:
java.security.cert.CertificateException:无法解析证书: java.io.IOException:空输入
在我的控制台中,我有:
别名:certificatealias
bis.available:0
bis:java.io.BufferedInputStream@8xx9d4
错误发生在cf.generateCertificate(bis)
。
为什么我有这个错误? cf和bis不为null或为空......
我看到它可能是错误的密钥库类型(请参阅帖子3 years ago)。 KeyStore.getDefaultType()
返回JKS。那应该是好的,不是吗?
我已经用命令行检查了一下:
keytool -list -keystore <keystore_location>
我的类型是:
类型de fichierdeclés:JKS
Fournierur de fichierdeclés:SUN
任何提示都会非常有用!