Как мне создать AuthorityKeyIdentifier из открытого ключа в C?
Я создаю самозаверяющий сертификат, используя openssl.
Я создал пару ключей с помощью функции openssl RSA_generate_key()
:
key = RSA_generate_key(1024, 65537, null, 0);
Теперь я хочу сгенерировать идентификатор ключа авторизации для самозаверяющего сертификата.
RFC говорит:
Значение поля keyIdentifier ДОЛЖНО быть получено из открытого ключа, используемого для проверки подписи сертификата, или метода, который генерирует уникальные значения. Два общих метода для генерации идентификаторов ключей из открытого ключа описаны в Разделе 4.2.1.2.
Хорошо. Давайте посмотрим. В упомянутом разделе 4.2.1.2 в описании говорится:
(1) Ключ keyIdentifier состоит из 160-битного хэша SHA-1 значения BIT STRING subjectPublicKey (исключая тег, длину и количество неиспользованных битов).
(2) KeyIdentifier состоит из четырехбитного поля со значением 0100, за которым следуют наименее значимые 60 битов хэша SHA-1 значения BIT STRING subjectPublicKey (исключая тег, длину и количество неиспользуемых биты).
Если я хочу использовать версию (1): как получить хешируемые данные, чтобы создать действительный идентификатор ключа авторизации?
1 ответ
Сначала вам нужно создать свой сертификат. Затем добавьте авторитетный идентификатор ключа расширения следующим образом:
add_ext(YourX509SelfSignedCert, NID_authority_key_identifier, "keyid,issuer");
Вы также можете использовать только Ke yID, есть хорошая статья о том, что использовать здесь