java - 如何以编程方式将可信证书导入现有 keystore ?

标签 java ssl import certificate keystore

我需要将受信任的证书导入到现有的 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 ,但您尝试从中加载的初始文件似乎比应有的短。

此外,您的FileInputStreamFileOutputStream 指的是同一个文件。我建议在写入另一个之前关闭您阅读的一个,以避免冲突:

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/

相关文章:

java - 防止在 Java 中分配 ArrayList 迭代器

java - 从 Java 中的另一个类调用重绘?

java - 在 wiremock 中,是否可以根据请求记录 cookie?

amazon-web-services - 我们可以在 Nginx-Ingress-Contoller 使用多个 AWS ACM 证书或在 Ingress 对象级别使用多个 ACM 证书吗?

matlab - 为什么在函数中使用其内容后*可以导入包?

ios - Lib 导入问题 : Where is located SUPApplication. h 和 SUPConnectionProperties.h?

java - eclipse 内存分析器看到整个堆转储 (8GB) 的一小部分 (363,2MB)

ios - iOS 8.1 中的随机 SSL 错误。 (NSURLErrorDomain :-1200)

ssl - 在 jboss 4.2 中配置 SSL 时出错?

GdkPixBuf 的 Python 导入显示 "introspection typelib not found"