Извлечение sha1 из сертификата X.509 openssl в Java

Я должен написать Java-реализацию парсера сертификатов X.509 openssl, но у меня проблема: я не знаю, как получить sha1 для проверки сертификатов. Может ли кто-нибудь помочь мне понять, что я должен делать? Я знаю, что в Java есть метод getTBSCertificate(), но я должен переписать его для своих целей.


person 4nf3rt    schedule 31.12.2011    source источник
comment
Посмотрите здесь: stackoverflow.com/questions /143523/   -  person Francis Upton IV    schedule 31.12.2011


Ответы (1)


Предполагая, что вы имеете в виду sha1, который обычно отображается как «отпечаток пальца» в браузерах и инструментах ОС, вам нужно 1) необработанный сертификат как DER; а затем 2) sha1 это и 3) перевести это в обычную строку, разделенную двузначными шестнадцатеричными цифрами и двоеточиями.

Что касается 1; getEncoded() из java.security.cert.Certificate дает вам это.

Что касается 2: MessageDigest имеет эту функцию.

Что касается 3: я оставлю это вам :)

... someFoo(X509Certificate cert) {
    MessageDigest sha1 = MessageDigest.getInstance("SHA1");
    System.out.println("  Subject " + cert.getSubjectDN());
    System.out.println("   Issuer  " + cert.getIssuerDN());
    sha1.update(cert.getEncoded());
    System.out.println("   sha1    " + toHexString(sha1.digest()));
    System.out.println();
  }

должен сделать трюк. Этот вывод совпадает с выводом java keytool.

Dw.

person Dirk-Willem van Gulik    schedule 07.05.2012
comment
Это действительно верно для отпечатка пальца. Я предполагаю, что вопрос может также касаться проверки подписи... Вот несколько недавних связанных вопросов: о отпечатках пальцев и о подписях (и центрах сертификации). - person Bruno; 08.05.2012