web-dev-qa-db-ja.com

プログラムで.cer証明書をキーストアにインポートします

.p12証明書をクラスパスからJavaキーストアにインポートするにはどうすればよいですか?最初にInstallCertを使用しました https://code.google.com/p/Java-use- examples/source/browser/trunk/src/com/aw/ad/util/InstallCert.Java サーバー証明書がJava)のキーストアにインポートされるようにいくつかの変更を行いましたインストールディレクトリ。これは正常に機能しますが、クラスパスから証明書をロードしたいと思います。

編集:私は.cer証明書を使用しています。次の回答を参照してください

12
Pali

答え:

    InputStream certIn = ClassLoader.class.getResourceAsStream("/package/myCert.cer");

    final char sep = File.separatorChar;
    File dir = new File(System.getProperty("Java.home") + sep + "lib" + sep + "security");
    File file = new File(dir, "cacerts");
    InputStream localCertIn = new FileInputStream(file);

    KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
    keystore.load(localCertIn, passphrase);
    if (keystore.containsAlias("myAlias")) {
        certIn.close();
        localCertIn.close();
        return;
    }
    localCertIn.close();

    BufferedInputStream bis = new BufferedInputStream(certIn);
    CertificateFactory cf = CertificateFactory.getInstance("X.509");
    while (bis.available() > 0) {
        Certificate cert = cf.generateCertificate(bis);
        keystore.setCertificateEntry("myAlias", cert);
    }

    certIn.close();

    OutputStream out = new FileOutputStream(file);
    keystore.store(out, passphrase);
    out.close();

Java Web StartはClassLoaderを使用せず、クラス自体を使用します。

InputStream certIn = Certificates.class.getResourceAsStream("/package/myCert.cer");
24
Pali

「Java.io.FileNotFoundException:C:\ Program Files(x86)\ Java\jre1.8.0_45\lib\security\cacerts(アクセスが拒否されました)」の問題も発生します。\securiyyフォルダーに移動し、hにアクセスするためのアクセス許可を手動で付与する必要があります

0
Feng Zhang