キーストアファイルの証明書名とエイリアスを確認するにはどうすればよいですか?


410

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

回答:


720

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

keytool -v -list -keystore .keystore

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

keytool -list -keystore .keystore -alias foo

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

keytoolエラー:java.lang.Exception:エイリアスが存在しません


1
こんにちは、キーエイリアスパスワードを表示できます。キーエイリアス名がわかっていて、キーストア証明書とキーストアパスワードがある場合
Prateek

11
@prateekできません。コマンドラインツールで表示するだけの場合は、キーストアまたはキーパスワードを設定しても意味がありません。
ローンの侯爵2015

2
次のコマンドを実行して、キーストアファイルの内容を一覧表示できます。keytool -list -keystore .keystore上記のcommondは、エイリアスの名前を提供していません
Manmohan Soni

1
@ManmohanSoniエイリアスを明らかにする-v引数を含めるように更新しました
Steven Mark Ford

10
私はと思います/path/to/keystore代わりに.keystore、読者に、より明確になります。とにかく正解です!
Andrea

261

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

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

4
keytool -v -list -keystore <FileName> .jks
piyush singh

1
keytool -v -list -keystore cacerts
Ankur Srivastava 2017年

2
「この-vオプションを指定すると、所有者、発行者、シリアル番号、拡張子などの追加情報とともに、人間が読める形式で証明書が印刷されます。」(参照:Java SEツールリファレンス、データの表示コマンド、-listオプション
Eido95 '24

64

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);

@prateekホープこれがあなたが探しているものです!


import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.security.cert.Certificate; import java.security.KeyStore; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; import java.util.Enumeration;
ban-geoengineering 2013

1
@Renjith helloこのコードは、エイリアスに関連付けられたパスワードを除くすべてを表示します。私を助けてください
Prateek 2013

@Renjith java.security.UnrecoverableKeyExceptionこれは、実際にエイリアスパスワードを取得したいこのコードを試したときにスローされる例外です
Prateek

2
前述のwhileループ内でコードスニペットを使用する必要があります
Renjith

1
Base64Encoderクラスがありませんでした。どのjarファイルが含まれているか教えていただけますか?それとも.javaファイルですか?
Jack


17

bashのような環境では、以下を使用できます。

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

このコマンドは3つの部分で構成されています。上記のように、最初の部分ではすべての信頼できる証明書がすべての詳細とともに一覧表示されます。そのため、2番目の部分ではこれらの詳細の中からエイリアス情報のみをフィルタリングします。そして最後に、3番目の部分で特定のエイリアス(またはその一部)を検索できます。-iターンの大文字小文字を区別しないモード。したがって、指定されたコマンドは、パターン「foo」、fe foo、123_FOO、fooBarなどを含むすべてのエイリアスを生成します。詳細については、を参照してくださいman grep


12

これにより、すべての証明書がリストされます。

keytool -list -keystore "$JAVA_HOME/jre/lib/security/cacerts"

これは、JDKのトラストストアに格納されている証明書のみをリストします。これは、キーストアとは異なる目的で使用されます(尋ねられた)。ここには良い区別があります:http : //stackoverflow.com/questions/17935619/what-is-difference-between-cacerts-and-keystore
David Levy
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.