我需要将受信任的证书导入到现有的 keystore 中,这是我的代码,但它向我抛出 EOFException,可能是哪里出了问题?
public void importTrustedCertificate( String alias, byte [] trustedCertificate )
throws Exception
{
KeyStore keyStore = KeyStore.getInstance( "JKS" );
FileInputStream fileInputStream = new FileInputStream( "keystore" + File.separator + "ClientRegistrarKeyStore.jks" );
FileOutputStream fileOutputStream = new FileOutputStream( "keystore" + File.separator + "ClientRegistrarKeyStore.jks" );
keyStore.load( fileInputStream, "keystore".toCharArray() );
keyStore.setCertificateEntry( alias, new X509Certificate( trustedCertificate ) );
keyStore.store( fileOutputStream, "keystore".toCharArray() );
fileInputStream.close();
fileOutputStream.close();
return;
}
错误:
Exception in thread "main" java.io.EOFException
at java.io.DataInputStream.readInt(DataInputStream.java:375)
at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:628)
at sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:38)
at java.security.KeyStore.load(KeyStore.java:1185)
at com.netrust.passportverification.clientregistrar.setup.IniFileGenerator.importTrustedCertificate(IniFileGenerator.java:107)
at com.netrust.passportverification.clientregistrar.setup.IniFileGenerator.processZipFile(IniFileGenerator.java:165)
at com.netrust.passportverification.clientregistrar.setup.IniFileGenerator.main(IniFileGenerator.java:180)
Java Result: 1
最佳答案
你确定这个位置的文件不是空的吗? keytool
可以列出它的内容吗?此 EOFException
看起来并不特定于 keystore ,但您尝试从中加载的初始文件似乎比应有的短。
此外,您的FileInputStream
和FileOutputStream
指的是同一个文件。我建议在写入另一个之前关闭您阅读的一个,以避免冲突:
FileInputStream fileInputStream = new FileInputStream( "keystore" + File.separator + "ClientRegistrarKeyStore.jks" );
keyStore.load( fileInputStream, "keystore".toCharArray() );
fileInputStream.close();
keyStore.setCertificateEntry( alias, new X509Certificate( trustedCertificate ) );
FileOutputStream fileOutputStream = new FileOutputStream( "keystore" + File.separator + "ClientRegistrarKeyStore.jks" );
keyStore.store( fileOutputStream, "keystore".toCharArray() );
fileOutputStream.close();
关于java - 如何以编程方式将可信证书导入现有 keystore ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8415267/