web-dev-qa-db-ja.com

キーストアファイルで証明書の名前とエイリアスを確認する方法

私はたくさんの.keystoreファイルを持っており、特定のCNとエイリアスを持つものを見つける必要があります。 keytool、jarsigner、その他のツールでそれを行う方法はありますか?特定のキーストアが特定のapkの署名に使用されているかどうかを確認する方法を見つけましたが、各ファイルのエイリアスと証明書の名前も取得する必要があります。

337
Malthan

次のコマンドを実行して、キーストアファイルの内容(およびエイリアス名)を一覧表示できます。

keytool -v -list -keystore .keystore

特定のエイリアスを探しているなら、コマンドでそれを指定することもできます。

keytool -list -keystore .keystore -alias foo

エイリアスが見つからない場合は、例外が表示されます。

keytoolエラー:Java.lang.Exception:別名が存在しません

587
Romain Linsolas

すべての詳細を取得するために、romaintazの回答に-vオプションを追加する必要がありました。

keytool -v -list -keystore <FileName>.keystore
237
enkara

Javaコードから実行できます。

try {

        File file = new File(keystore location);
        InputStream is = new FileInputStream(file);
        KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
        String password = "password";
        keystore.load(is, password.toCharArray());


        Enumeration<String> enumeration = keystore.aliases();
        while(enumeration.hasMoreElements()) {
            String alias = enumeration.nextElement();
            System.out.println("alias name: " + alias);
            Certificate certificate = keystore.getCertificate(alias);
            System.out.println(certificate.toString());

        }

    } catch (Java.security.cert.CertificateException e) {
        e.printStackTrace();
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (KeyStoreException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }finally {
        if(null != is)
            try {
                is.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    }

証明書クラスはキーストアに関するすべての情報を保持しています。

更新取得プライベートキー

Key key = keyStore.getKey(alias, password.toCharArray());
String encodedKey = new Base64Encoder().encode(key.getEncoded());
System.out.println("key ? " + encodedKey);

これがあなたが探しているものであることを願っています!

58
Renjith

キーストアエクスプローラ キーストアを管理するためのオープンソースのビジュアルツール。

55
Ycnannamela

Bash風の環境では、次のものを使うことができます。

keytool -list -v -keystore cacerts.jks | grep 'Alias name:' | grep -i foo

このコマンドは3つの部分から構成されています。上で述べたように、 1st の部分は全ての信頼できる証明書を全ての詳細と共にリストするでしょう、そして 2nd の部分はそれらの詳細の中でエイリアス情報だけをフィルタリングするようになる理由です。そして最後に 3rd の部分で特定のエイリアス(またはその一部)を検索できます。 -i は、大文字と小文字を区別しないモードをオンにします。したがって、与えられたコマンドはパターン 'foo'、f.eを含むすべてのエイリアスを生成します。 foo、123_FOO、fooBarなど。詳細についてはman grep

16
Svetoslav

これにより、すべての証明書が一覧表示されます。

keytool -list -keystore "$Java_HOME/jre/lib/security/cacerts"
7
Walk