Чтение информации о сертификате pkcs12

У меня проблема с чтением информации о сертификате. Я хочу прочитать полную информацию, используя java с библиотекой bouncycastle в Android программно. Теперь я просто использую команду keytool в консоли:

>keytool -list -keystore 1.p12 -storetype pkcs12 -v

Какие-либо предложения?


person ilya.stmn    schedule 06.06.2013    source источник
comment
А что вы пробовали?   -  person Konstantin V. Salikhov    schedule 07.06.2013
comment
Я нашел решение (ниже), спасибо за внимание.   -  person ilya.stmn    schedule 07.06.2013


Ответы (1)


Я нашел решение, основная идея - преобразовать сертификат в x509, затем получить значения SubjectDN и проанализировать.

public class TestClass {
    public static void main(String[] args) throws Exception {

        KeyStore p12 = KeyStore.getInstance("pkcs12");
        p12.load(new FileInputStream("pkcs.p12"), "password".toCharArray());
        Enumeration<String> e = p12.aliases();
        while (e.hasMoreElements()) {
            String alias = e.nextElement();
            X509Certificate c = (X509Certificate) p12.getCertificate(alias);
            Principal subject = c.getSubjectDN();
            String subjectArray[] = subject.toString().split(",");
            for (String s : subjectArray) {
                String[] str = s.trim().split("=");
                String key = str[0];
                String value = str[1];
                System.out.println(key + " - " + value);
            }
        }
    }
}
person ilya.stmn    schedule 07.06.2013
comment
Просто не забудьте использовать классы java.security.* вместо javax.security.* - person Diego Plentz; 20.06.2014
comment
Привет @DiegoPlentz Этот код не всегда работает. На моей машине p12.getCertificate(alias) возвращает значение null. Файл pfx был создан openssl как openssl pkcs12 -export -out 1.pfx -in server.crt -inkey server.key. Я протестировал ваш код с другим файлом pfx, который был экспортирован диспетчером сертификатов Windows, он отлично работает. - person Changming Sun; 09.05.2016
comment
Это нормально для меня, но кто-нибудь знает, как установить файл .p12 на устройство? - person Uday Nayak; 27.06.2016
comment
@ChangmingSun Может быть, попробуйте передать параметр -name. Дополнительная информация: stackoverflow.com/questions/21138420/ - person Vivek Chavda; 31.10.2016
comment
@UdayNayak Что значит установить? Файл можно сгенерировать (используя openssl), как это сделал Чанминг. - person Vivek Chavda; 31.10.2016
comment
Работает нормально, но с небольшим исправлением для NPE:String value = (str.length > 1) ? str[1] : ""; - person Alastair; 30.12.2016
comment
хорошая статья с более подробной информацией о том же. nofollow noreferrer">pixelstech.net/article/ - person arvin_v_s; 19.09.2017