HashCode для CSR

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

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

Я делаю что-то не так?


person DanMatlin    schedule 17.07.2013    source источник


Ответы (1)


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

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

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

person gtrig    schedule 17.07.2013
comment
Я преобразовал открытый ключ в формат DER, а также попытался применить хэш к полному CSR (как в формате p10, так и в формате PEM). Во всех случаях сгенерированное хеш-значение не совпадает. - person DanMatlin; 18.07.2013
comment
Когда вы создаете CSR, берется хеш отличительного имени, открытого ключа и других атрибутов сертификата. Этот хэш подписан, и подпись включена как часть CSR. Если хэш, о котором вы говорите, является тем же хэшем, на котором основана подпись, вы не сможете просто взять хэш SHA1 CSR. Вам нужно будет открыть CSR в шестнадцатеричном редакторе, удалить алгоритм подписи, подпись и первые байты заголовка ASN.1. Затем вы можете взять хэш SHA1 того, что осталось, и это будет соответствовать хешу, на котором основана подпись. - person gtrig; 18.07.2013