2011-12-07 7 views
0

信頼できる証明書を既存のキーストアにインポートする必要があります。ここに私のコードがありますが、それは私に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 
+0

X509Certificatesを行番号7でインスタンス化できません。 – AndroidLearner

+0

キーストアの作成とそれに証明書をインポートする完全なコードをアップロードできますか?私はpfx証明書を持っています、私はその証明書をインポートできますか?私はアンドロイドを使用しています。2.3.3 – AndroidLearner

+0

http://stackoverflow.com/questions/32851341/load-ca-root-certificate-at-runtime-in-javaを参照してください –

答えて

4

あなたは、この場所にファイルが空ではありませんか? keytoolの内容を表示できますか?このEOFExceptionはキーストア固有のものではありませんが、読み込み元のファイルのサイズが必要なサイズよりも短いようです。

また、FileInputStreamFileOutputStreamは同じファイルを参照しています。私は、競合を避けるために、他のものに書き込む前から1あなたの読み取りを閉じることをお勧めしたい:

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(); 
+0

は、あなたはどうやって葛藤するのか分かりましたか? – shawn

+0

'keyStore.setCertificateEntry(別名、新しいX509Certificate(trustedCertificate));行のX509Certificateタイプをインスタンス化できません; – AndroidLearner

+0

キーストアを作成してから証明書をインポートするのを手伝ってもらえますか?私はpfx証明書を持っています、私はその証明書をインポートできますか?私はアンドロイド2.3.3を使用しています。前もって感謝します – AndroidLearner

0

、このいずれかを試してみてください...

証明書の証明書= keyStore.getCertificate(別名)。

keyStore.setCertificateEntry(別名、証明書);

関連する問題