2013-07-17 3 views
1

Я сгенерировал сертификат P10 и документ заявки на сертификацию с использованием программного обеспечения (Dakota). Документ содержит хеш-код. Этот хеш-код должен быть хэшем SHA1 открытого ключа сертификата.HashCode для CSR

Чтобы проверить это, я преобразовал сертификат P10 в сертификат формата PEM с помощью openssl. Затем я извлек открытый ключ этого сертификата PEM с помощью openssl. Применяя алгоритм SHA1 хэширования этого открытого ключа, я получаю хэш-код, отличный от того, который автоматически генерируется ПО Dakota.

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

ответ

0

Я могу думать о двух возможных проблемах здесь. Во-первых, ваш открытый ключ в формате PEM? Если это так, вы, вероятно, захотите преобразовать его в формат DER, прежде чем принимать хэш SHA1.

Вторая возможная проблема заключается в том, что хэш может быть не просто хэшем открытого ключа. Это может быть хэш открытого ключа, различающееся имя и, необязательно, набор атрибутов сертификата. Эти компоненты составляют CSR вместе с подписью.

Я не уверен, почему хэш даже там. Если подпись является частью CSR, хэш действительно не нужен.

+0

Я преобразовал открытый ключ в формат DER, а также попытался применить хеш к полной CSR (как формат p10, так и формат PEM). Во всех случаях генерируемое хеш-значение не совпадает. – DanMatlin

+1

Когда вы создаете CSR, есть хеш выделенного имени, открытого ключа и других атрибутов сертификата. Этот хэш подписан и подпись включена в состав CSR. Если хеш, о котором вы говорите, является тем же самым хэшем, на котором основана подпись, вы не сможете просто использовать хэш SHA1 CSR. Вам нужно будет открыть CSR в шестнадцатеричном редакторе, удалить алгоритм подписи, подпись и первые байты заголовка ASN.1. Затем вы можете взять хэш SHA1 того, что осталось, и это будет соответствовать хешу, на котором основана подпись. – gtrig