2016-07-06 5 views
1

Для обучения в настоящее время я пытаюсь сгенерировать сертификат SHA2 с помощью Javatool. Однако, когда я генерирую ключи, он говорит, что сертификат Fingerprint - SHA1, а не SHA2.Java Keytool создает сертификат SHA1, даже если указан SHA2

keytool -genkey -alias test_sha2_rsa_key -keyalg RSA -keysize 2048 -keystore .keystore -sigalg "SHA256withRSA" 

Вот результат, когда я перечисляю ключи.

keytool -list 
Enter keystore password: 

Keystore type: JKS 
Keystore provider: SUN 

Your keystore contains 1 entry 

test_sha2_rsa_key, Jul 6, 2016, PrivateKeyEntry, 
Certificate fingerprint (SHA1): DD:9E:55:B7:90:9F:91:6C:68:D3:5C:24:E7:D4:45:D1:7D:8C:3A:5A 

Я читаю это неправильно или делаю это неправильно?

+4

Отпечаток пальца не имеет ничего общего с подписью. У вас могут быть MD5, SHA1, SHA256, и если вы хотите отпечатки пальцев Whirpool и/или Skein сертификата, подписанного с SHA512, и так далее для всех комбинаций. Попробуйте '-list -v' просмотреть (наиболее) детали сертификата, включая sigalg. –

+0

Спасибо. Я уточню вопрос. Я был неправ. и ты прав. – Pred

ответ

2

Отпечаток SHA-1 рассчитывается по двоичному (DER) закодированному сертификату. Он не содержится в сертификате и, как уже указывал Дэйв, не связан с подписью на tbsCertificate (часть сертификата «подлежит подписанию»). Фактически, поскольку он находится по всему сертификату, ссылка на алгоритм сигнатуры (OID) и сама подпись также включена в данные отпечатка пальца.


Помните, что отпечатки пальцев сертификата с помощью SHA-1 примерно так же безопасно, как подписать сертификат с SHA-1. Это зависит от того, как используется отпечаток пальца, но в принципе это может привести к уязвимости, если (или когда) SHA-1 сломан.

+1

Ну, кто-то должен ответить за пределы комментариев, не так ли? –