Что такое сертификат в контексте RSA и асимметричного шифрования? - PullRequest
0 голосов
/ 14 мая 2019

Я пытаюсь реализовать асимметричную надпись для целей обучения. Я узнал, что сертификат помогает идентифицировать владельца открытого ключа. Но как я могу реализовать сертификат? Можете ли вы привести пример сертификата, который я могу использовать?

Я реализовал шифрование и дешифрование, но теперь я хочу использовать сертификат.

Ответы [ 2 ]

1 голос
/ 15 мая 2019

Вы можете сгенерировать самозаверяющий сертификат X.509, используя OpenSSL - в Интернете есть много учебников.Сертификаты имеют стандартизированные форматы и не являются специфичными для Java.

openssl req -x509 -newkey rsa:3072 -sha256 -nodes -keyout privkey.pem -out selfsigned.pem
openssl pkcs8 -in privkey.pem -nocrypt -outform DER -out privkey.p8
openssl x509 -in selfsigned.pem -outform DER -out selfsigned.crt

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

Сертификат совместим с CertificateFactory для "X.509".Закрытый ключ совместим с KeyFactory с "RSA" в качестве алгоритма и PKCS8EncodedKeySpec.

Сама Java не может использоваться напрямую когда дело доходит до генерации сертификатов.Вы можете использовать Bouncy Castle или даже EJBCA, если требуется генерация кода, но это довольно крутая кривая обучения.

0 голосов
/ 15 мая 2019

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

Общий формат для сертификатов - X.509, закодированный в ASN1.

Типовой сертификат должен содержать хотя бы «общее имя», отпечаток ключа субъекта (хэш сертифицируемого открытого ключа), срок действия и подпись CA всего этого.

...