2011-12-31 3 views
1

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

+1

Посмотрите здесь: http://stackoverflow.com/questions/143523/x509-certificate-parsing-libraries-for-java –

ответ

5

Предполагая, что вы имеете в виду sha1, который обычно отображается как «отпечаток пальца» в браузерах и инструментах ОС - вам нужен 1) исходный сертификат как DER; а затем 2) sha1 it и 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.

+0

Это действительно верно для отпечатка пальца. Я предполагаю, что вопрос может также касаться проверки подписи ... Вот несколько недавних связанных вопросов: [об отпечатках пальцев] (http://security.stackexchange.com/q/14330/2435) и [о подписях (и ЦС)] (http://stackoverflow.com/q/10411433/372643). – Bruno

Смежные вопросы