web-dev-qa-db-ja.com

パスワードなしでJKSキーストアファイルを作成することは可能ですか?

私はOSGiの条件付きパーミッションメカニズムを実験しています。具体的には、org.osgi.service.condpermadmin.BundleSignerConditionを使用して、開始できるバンドルを制限しようとしています。ドキュメントこの権限を使用するには、org.osgi.framework.trust.repositoriesフレームワーク構成プロパティを使用してJKSキーストアへのパスを指定する必要があると述べています。ただし、同じドキュメントには、このプロパティで言及されているJKS​​にパスワードを設定してはならないことが記載されています。したがって、問題は、パスワードなしでJKSを作成する方法です。 Keytoolユーティリティは、空白のパスワードでJKSを作成することを拒否します。

11
Alex

しばらくの間、keytoolを使用して空白のパスワードでキーストアを作成することはできませんが、プログラムで作成することはできます。

このような証明書を読んでください:

private static Certificate readCert(String path) throws IOException, CertificateException {
    try (FileInputStream fin = new FileInputStream(path)) {
        return CertificateFactory.getInstance("X.509").generateCertificate(fin);
    }
}

次のように、空のパスワードでキーストアを作成するよりも:

try {
    // Reading the cert
    Certificate cert = readCert("/tmp/cert.cert");

    // Creating an empty JKS keystore
    KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
    keystore.load(null, null);

    // Adding the cert to the keystore
    keystore.setCertificateEntry("somecert", cert);

    // Saving the keystore with a zero length password
    FileOutputStream fout = new FileOutputStream("/tmp/keystore");
    keystore.store(fout, new char[0]);
} catch (GeneralSecurityException | IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

次のコマンドを実行します。

keytool -list -keystore keystore

パスワードの入力を求められますが、Enterキーを押すだけです。次の警告が表示されますが、キーストアの内容が一覧表示されます。

*****************  WARNING WARNING WARNING  *****************
* The integrity of the information stored in your keystore  *
* has NOT been verified!  In order to verify its integrity, *
* you must provide your keystore password.                  *
*****************  WARNING WARNING WARNING  *****************

これはあなたのために働くかもしれません。

18
Balazs Zsoldos