
Используя 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 для того же хранилища ключей?
решение1
TheИдентификатор ключа субъекта(SKI или SKID) — свойство (расширение X.509) отдельного сертификата.
Обычно он вычисляется как хэш SHA-1 при подписании сертификата, хэшируемые данные могут различаться, но обычно включают в себя как минимумТемаPublicKeyбитовая строка, и она может не быть полным 160-битным значением SHA-1.
Единственное, что (технически) заботит, как создается хэш, — это система, выполняющая подпись, или иногда система, выполняющая создание запроса, поскольку он может быть добавлен к запросу. За пределами этого он рассматривается как непрозрачный отпечаток пальца или уникальный идентификатор — его значение нужно только сравнить, чтобы идентифицировать конкретный сертификат или его эмитента (чтобы помочь и оптимизироватьпроверка пути), его не нужно пересчитывать.
Если вы хотите правильно вычислить хэш SHA-256, вам нужно будет выяснить, какие именно поля ваша система использует для вычисления хеша, и использовать это в качестве входных данных для SHA-256. СмотритеRFC5280, особенно§4.2.1.1и§4.2.1.2. Подписанные данныевероятноПростоТемаPublicKeyилитемаPublicKeyInfoв двоичном формате DER последнее, по-видимому, относится к сертификату, подписанному OpenSSL.
В этом (устаревшем) проекте RFC предлагается использовать хэши SHA-2 для идентификаторов ключей субъекта: https://datatracker.ietf.org/doc/html/draft-turner-additional-methods-4kis-08
Есть запрос на функцию и патч для этого, который немного томится вОшибка OpenSSL №2599
решение2
Его не существует, и вам действительно не нужно, чтобы он существовал. Сертификату нужно толькоуникальныйидентификатор в свойстве Subject Key IDentifier, который может сообщить вашей системе, какой ключ использовать для его расшифровки. Он даже не обязательно должен быть хешем, он просто должен быть уникальным. Вы могли бы точно так же использовать текст "Zeutheus Key #1" для SKID, если только вы не используете его повторно для обозначения другого ключа.
Если вы действительно хотите использовать SHA-256 для генерации вашего SKID, вперед. Как только вы его получите, вам придется создать новый запрос сертификата, который использует новое значение, и подписать его. Некоторые инструменты, такие как certutil.exe от Microsoft, позволяют вам задать определенное значение для любого OID в запросе сертификата. Вы можете сгенерировать хэш SHA-256 вашего открытого ключа, а затем поместить это значение в OID SKID. Но это целая куча работы, которую вам не нужно делать, когда по умолчанию генерируется хэш SHA-1, который достаточно хорошо подходит для этой цели.