Anahtar deposu dosyalarındaki sertifika adı ve diğer adı nasıl kontrol edilir?


410

Bir sürü .keystore dosyam var ve belirli CN ve takma adı olan birini bulmam gerekiyor. Keytool, jarsigner veya başka bir araçla yapmanın bir yolu var mı? Belirli bir apk'yi imzalamak için belirli bir anahtar deposunun kullanılıp kullanılmadığını kontrol etmenin bir yolunu buldum, ancak dosyaların her birinde diğer adı ve sertifika adını da almam gerekiyor.

Yanıtlar:


720

Anahtar deposu dosyanızın (ve diğer adınızın) içeriğini listelemek için aşağıdaki komutu çalıştırabilirsiniz:

keytool -v -list -keystore .keystore

Belirli bir takma ad arıyorsanız, bunu komutta da belirtebilirsiniz:

keytool -list -keystore .keystore -alias foo

Takma ad bulunamazsa, bir istisna görüntüler:

keytool hatası: java.lang.Exception: Takma ad mevcut değil


1
Merhaba anahtar takma parolasını görüntüleyebilir miyim Anahtar takma adı biliyorsanız ve anahtar deposu sertifikası ve anahtar deposu
parolam varsa

11
@prateek Yapamazsınız. Komut satırı aracıyla görüntüleyebiliyorsanız, anahtar deposu veya anahtar parolalarına sahip olmanın fazla bir anlamı olmaz.
Lorne Marquis

2
Anahtar deposu dosyanızın içeriğini listelemek için aşağıdaki komutu çalıştırabilirsiniz: keytool -list -keystore .keystore Yukarıdaki komut takma adın adını vermemektedir
Manmohan Soni

1
@ManmohanSoni Bunu, takma adı gösteren -v argümanını içerecek şekilde güncelledim
Steven Mark Ford

10
Ben düşünüyorum /path/to/keystoreyerine .keystoreokuyucuya daha açık olacaktır. Her neyse, bu doğru cevap!
Andrea

261

Tüm ayrıntıları almak için romaintaz yanıtına -v seçeneğini eklemek zorunda kaldım:

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

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

1
keytool -v -list -keystore cacerts
Ankur Srivastava

2
" -vSeçenek belirtilirse, sertifika sahibi, yayıncı, seri numarası ve diğer uzantılar gibi ek bilgilerle insan tarafından okunabilir biçimde yazdırılır ." (bkz: Java SE Araçları Referansı, Verileri Görüntüle komutu, -list seçeneği )
Eido95

64

Java kodundan çalıştırabilirsiniz.

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

Sertifika sınıfı anahtar deposu ile ilgili tüm bilgileri tutar.

GÜNCELLEME- ÖZEL ANAHTAR ALIN

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

@prateek Umarım aradığınız şey budur!


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; ithalat java.util.Eumeration;
ban-geoengineering

1
@Renjith merhaba Bu kod, takma adla ilişkili parola, Nasıl görüntüleyebilirim hariç her şeyi görüntüler. Lütfen bana yardım et
Prateek

@Renjith java.security.UnrecoverableKeyExceptionBu aslında bu kodu denediğinizde atılan bir istisna aslında takma parola almak istiyorum
Prateek

2
yukarıda belirtilen döngü içindeki kod snippet'ini kullanmalısınız
Renjith

1
Base64Encoder sınıfım yoktu. Bana hangi kavanoz dosyasının olduğunu söyleyebilir misiniz? ya da bir .java dosyası mı?
Jack


17

Bash benzeri bir ortamda şunları kullanabilirsiniz:

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

Bu komut 3 bölümden oluşmaktadır. Yukarıda belirtildiği gibi, 1. kısım tüm güvenilir sertifikaları tüm detaylarla listeleyecektir ve bu nedenle 2. kısım sadece bu detaylar arasındaki takma adı filtrelemeye başlar. Ve son olarak 3. bölümde belirli bir takma ad (veya bir kısmı) arayabilirsiniz. dönüşler üzerinde harf duyarsız modu. Böylece verilen komut 'foo', fe foo, 123_FOO, fooBar, vb. Kalıplarını içeren tüm takma adları verecektir. Daha fazla bilgi için man grep.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.