Bagaimana cara memeriksa nama dan alias sertifikat dalam file keystore?

410

Saya memiliki banyak file .keystore dan perlu mencari satu dengan CN dan alias khusus. Apakah ada cara untuk melakukannya dengan keytool, jarsigner atau alat lain? Saya menemukan cara untuk memeriksa apakah keystore spesifik digunakan untuk menandatangani apk tertentu, tetapi saya juga perlu mendapatkan nama alias dan sertifikat di setiap file.

Malthan
sumber

Jawaban:

720

Anda dapat menjalankan perintah berikut untuk mencantumkan konten file keystore Anda (dan nama alias):

keytool -v -list -keystore .keystore

Jika Anda mencari alias tertentu, Anda juga bisa menentukannya di perintah:

keytool -list -keystore .keystore -alias foo

Jika alias tidak ditemukan, itu akan menampilkan pengecualian:

kesalahan keytool: java.lang.Exception: Alias ​​tidak ada

Romain Linsolas
sumber
1
Hai, bisakah saya menampilkan kata sandi alias kunci Jika saya tahu nama alias kunci dan memiliki sertifikat keystore dan kata sandi keystore
Prateek
11
@prateek Anda tidak bisa. Tidak akan ada gunanya memiliki keystore atau kata sandi kunci jika Anda bisa menampilkannya dengan alat baris perintah.
Marquis of Lorne
2
Anda dapat menjalankan perintah berikut untuk membuat daftar isi file keystore Anda: keytool -list -keystore .keystore Commond di atas tidak memberikan nama alias
Manmohan Soni
1
@ManmohanSoni Saya telah memperbaruinya untuk menyertakan argumen -v yang mengungkapkan alias
Steven Mark Ford
10
Saya berpikir bahwa /path/to/keystorealih - alih .keystoreakan lebih jelas bagi pembaca. Pokoknya itu jawaban yang benar!
Andrea
261

Untuk mendapatkan semua perincian, saya harus menambahkan opsi -v ke jawaban romaintaz:

keytool -v -list -keystore <FileName>.keystore
enkara
sumber
4
keytool -v -list -keystore <FileName> .jks
singh
1
keytool -v -list -keacore cacerts
Ankur Srivastava
2
"Jika -vopsi ditentukan, maka sertifikat dicetak dalam format yang dapat dibaca manusia , dengan informasi tambahan seperti pemilik, penerbit, nomor seri, dan ekstensi apa pun." (lihat: Referensi Java SE Tools, Display Data command, -list option )
Eido95
64

Anda dapat menjalankan dari kode 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();
            }
    }

Kelas sertifikat menyimpan semua informasi tentang keystore.

PEMBARUAN- KUNCI PRIVATE KUNCI

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

@prateek Semoga ini yang Anda cari!

Renjith
sumber
import java.io.File; import java.io.FileInputStream; impor java.io.FileNotFoundException; impor java.io.IOException; impor java.security.cert.Certificate; impor java.security.KeyStore; impor java.security.KeyStoreException; impor java.security.NoSuchAlgorithmException; import java.util.Numerasi;
larangan geoengineering
1
@Renjith halo Kode ini menampilkan semuanya kecuali kata sandi yang terkait dengan alias, Bagaimana saya bisa menampilkannya. Tolong bantu saya
Prateek
@Renjith java.security.UnrecoverableKeyExceptionini adalah pengecualian yang dilemparkan ketika saya mencoba kode ini sebenarnya saya ingin mengambil alias kata sandi
Prateek
2
Anda harus menggunakan potongan kode di dalam loop sementara yang disebutkan sebelumnya
Renjith
1
Saya tidak punya kelas Base64Encoder. Bisakah Anda memberi tahu saya file jar yang mana yang dimilikinya? atau apakah itu file .java?
Jack
58

KeyStore Explorer alat visual open source untuk mengelola keystores.

Ycnannamela
sumber
17

Di lingkungan mirip-bash Anda dapat menggunakan:

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

Perintah ini terdiri dari 3 bagian. Seperti yang dinyatakan di atas, bagian 1 akan mencantumkan semua sertifikat tepercaya dengan semua detail dan itulah mengapa bagian ke - 2 datang untuk memfilter hanya informasi alias di antara detail-detail itu. Dan akhirnya di bagian ke - 3 Anda dapat mencari alias tertentu (atau bagian dari itu). The -i bergantian kasus modus sensitif pada. Dengan demikian perintah yang diberikan akan menghasilkan semua alias yang mengandung pola 'foo', fe foo, 123_FOO, fooBar, dll. Untuk informasi lebih lanjut man grep.

Svetoslav
sumber