Правильное создание сертификатов для JWT в Java - PullRequest
0 голосов
/ 06 января 2020

Я пытаюсь использовать простой пример, приведенный здесь:

https://github.com/auth0/java-jwt

//HMAC
Algorithm algorithmHS = Algorithm.HMAC256("secret");

//RSA
RSAPublicKey publicKey = //Get the key instance
RSAPrivateKey privateKey = //Get the key instance
Algorithm algorithmRS = Algorithm.RSA256(publicKey, privateKey);

К сожалению, получение ключевых экземпляров для publi c и private ключ не такой простой 1015 * Я преобразовал закрытый ключ в форму DER openssl pkcs8 -topk8 -inform PEM -outform DER -in private_key.pem -out pkcs8.der -nocrypt

Теперь я могу загрузить закрытый ключ как:

val privateKey = readKeyAsBytes("pkcs8.der")
        .run { PKCS8EncodedKeySpec(this) }
        .run { KeyFactory.getInstance("RSA").generatePrivate(this) }
        as RSAPrivateKey

Однако это не работает для генерации ключа publi c:

val publicKey = readKeyAsBytes("publickey.crt")
        .run { X509EncodedKeySpec(this) }
        .run { KeyFactory.getInstance("RSA").generatePublic(this) }
        as RSAPublicKey

, так как он не работает с InvalidKeyException: invalid key format. Я не уверен, правильно ли .getInstnace(RSA) здесь, но я не мог заставить его работать ни с чем другим. Я полагаю, ключ publi c не в формате X509, но мне не удается преобразовать его в него.

1 Ответ

0 голосов
/ 09 января 2020

Вы говорите, что преобразовали файл закрытого ключа 'private_key.pem' в формат DER, но также преобразовали ключ publi c в формат DER.

Ожидается функция readKeyAsBytes двоичные данные.

DER означает «отличительные правила кодирования»; это двоичный формат. PEM - это просто кодированное в base64 представление двоичных данных DER с заголовком перед и нижним колонтитулом после. Но это текст ascii, а не бинарный.

Если вы откроете файлы в текстовом редакторе, файл DER станет кучей сумасшедших нечитаемых вещей.

Файлы PEM будут выглядеть примерно так:

-----BEGIN CERTIFICATE----- 
MIIGuzCCBaOgAwIBAgIUT2q/veSq2N3hq+1QSqfrZo6SW8IwDQYJKoZIhvcNAQEL 
...
Wu/svFTqcFBje8FiO98kFwJwSuajwt9l2mToy7W7PkQ+WARIOLR/7pcNh27O99Y=
-----END CERTIFICATE-----

Удачи

...