2

Используя Keytool, мы можем просмотреть детали хранилища ключей с помощью команды

keytool -list -v -keystore <KeystoreName>

Это возвращает набор значений, включая идентификатор ключа субъекта

SubjectKeyIdentifier [
KeyIdentifier [
0000: 60 7B 66 1A 45 0D 97 4B  CA 89 50 2F 7D 04 CD 34
0010: A8 FF FC FD
]
]

Это ключевой идентификатор SHA1. Как получить идентификатор ключа SHA 256 для того же хранилища ключей?

2 ответа2

1

Идентификатор ключа субъекта (SKI или SKID) - это свойство (расширение X.509) отдельного сертификата.

Обычно он вычисляется как хэш SHA-1, когда подписывается сертификат, хэшированные данные могут варьироваться, но обычно они содержат по крайней мере битовую строку subjectPublicKey , и это может быть не полное 160-битное значение SHA-1.

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

Если вы хотите правильно вычислить хеш SHA-256, то вам нужно будет выяснить, какие именно поля используется в вашей системе для вычисления хеша, и использовать их в качестве входных данных для SHA-256. См. RFC 5280, особенно § 4.2.1.1 и § 4.2.1.2. Подписанные данные, вероятно, представляют собой просто subjectPublicKey или subjectPublicKeyInfo в двоичном формате DER, что, как представляется, является последним для подписанного сертификата OpenSSL.

В этом (просроченном) проекте RFC предлагается использовать хэши SHA-2 для идентификаторов ключей субъекта:http://tools.ietf.org/html/draft-turner-additional-methods-4kis-08

В баге OpenSSL # 2599 есть запрос на добавление функции и патч для этого.

0

Этого не существует, и вам действительно не нужно, чтобы оно существовало. Сертификату нужен только уникальный идентификатор в свойстве Subject Key IDentifier, который может указать вашей системе, какой ключ использовать для его расшифровки. Это даже не должен быть хеш, просто он должен быть уникальным. С таким же успехом можно использовать текст «Ключ Цевтеуса # 1» для SKID, если вы не используете его повторно для обозначения другого ключа.

Если вы действительно хотите использовать SHA-256 для генерации SKID, продолжайте. Получив его, вам нужно будет создать новый запрос сертификата, который использует новое значение, и подписать его. Некоторые инструменты, такие как certutil.exe от Microsoft, позволяют вам устанавливать конкретное значение для любого OID в запросе сертификата. Вы можете сгенерировать хэш SHA-256 вашего открытого ключа, а затем поместить это значение в OID SKID. Но это большая работа, которую вам не нужно выполнять, когда по умолчанию генерируется хеш SHA-1, который достаточно хорошо работает для этой цели.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .