Инспектиране на JWKS и извличане на публични ключове PEM

инспектира JWK Set (JSON Web Key Set) и извлича всеки публичен ключ във формат PEM, готов за употреба за проверка на JWT подписи от доставчик на идентичност (OIDC, Auth0, Keycloak…)
Поставете цялото съдържание на JWKS документ, например този, изложен на /.well-known/jwks.json.

Какво е JWKS?

JWKS (JSON Web Key Set, RFC 7517) е JSON документ, който групира списък с публични ключове в структуриран вид. Използва се за публикуване на ключовете, които издател на JWT използва за подписване на своите жетони, така че всеки потребител да може да ги събира и проверява подписа на токените, които получава. Форматът винаги изглежда така:

<пре>{ "ключове": [ { "kty": "RSA", "kid": "abc123", "use": "sig", "alg": "RS256", "n": "...", "e": "AQAB" }, { "kty": "EC", "kid": "def456", "use": "sig", "alg": "ES256", "crv": "P-256", "x": "...", "y": "..." } ] }

Всеки запис в таблицата keys е JWK (JSON уеб ключ), който описва публичен ключ: тип ключ (kty), идентификатор (kid), използване предвиден (употреба), целеви алгоритъм (alg) и криптографски компоненти.

Кога се използва JWKS?

JWKS е гръбнакът на съвременните архитектури OAuth2 и OpenID Connect. Вие ще се срещне в няколко контекста:

  • OIDC Discovery: всеки доставчик на OpenID Connect излага документ на конфигурация в /.well-known/openid-configuration, която съдържа поле jwks_uri. На този URL има JWKS, изброяващ активни публични ключове.
  • JWT проверка: когато вашият API получи токен, подписан в RS256 или ES256, чете kid на заглавката, изтегля JWKS на предавателя, намира ключа съответстващ, извлича публичния ключ във формат PEM и проверява подписа.
  • Ротация на ключове: издателят може да публикува няколко ключа едновременно, това което ви позволява да въведете нов ключ за подписване на новите токени, като същевременно запазите старият е в експлоатация, докато токените в обращение изтичат.
  • Федерации: SAML, SCIM, взаимосвързани услуги, публикуване на JWKS избягва необходимостта от ръчен обмен на X.509 сертификати между партньори.

Съществени полета на JWK

Някои полета се появяват систематично в JWK. Този инструмент ги извлича и показва за всеки анализиран ключ на JWKS:

  • kid (ID на ключа): уникален идентификатор на ключа. Това е тази стойност че заглавката на JWT поставя в своето поле kid, за да посочи кой ключ от JWKS трябва да се използва за проверка.
  • kty (тип ключ): криптографско семейство. Двете стойности доминиращи са RSA (класически RSA ключове, използвани с RS256, RS384, RS512) и EC (елиптични криви, използвани с ES256, ES384, ES512).
  • alg (алгоритъм): алгоритъм за подпис, за който този ключ е планирано. Незадължително поле, но често се попълва. Позволява ви бързо да филтрирате ключове използваем за даден JWT.
  • използване: използване на ключа. sig за подписа (регистр обикновено), enc за криптиране (рядко, използва се с JWE).

Защо да конвертирате JWK в PEM?

Повечето класически криптографски библиотеки (OpenSSL, openssl_verify в PHP, crypto в Node.js, JCA в Java) приемат публични ключове във формат PEM (Base64 в рамка от -----BEGIN PUBLIC KEY-----), не директно във формат JWK. Следователно преобразуването на JWK в PEM е от съществено значение за:

  • Проверете ръчно подписа на JWT от скрипт или инструмент за команден ред (jwt, jose, step crypto).
  • Импортирайте ключа в инструмент за отстраняване на грешки като JWT Verifier който очаква PEM ключ в своето поле "публичен ключ".
  • Съхранявайте ключ в локален кеш или в конфигурационен файл в универсална форма и четим.
  • Бързо сравнете два ключа (PEM форматът улеснява визуалните разлики).

Ограничения и предупреждения

Този инструмент поддържа RSA (kty=RSA) и EC публични ключове (kty=EC на криви P-256, P-384, P-521). Други типове (OKP за Ed25519, oct за симетрични ключове) не се конвертират: те се докладват със съобщение за грешка от вход, останалата част от JWKS остава четима.

  • Преобразуването се извършва в една посока: JWKS към PEM. The повторното изграждане на JWK от съществуващ PEM ключ не се покрива от това версия.
  • JWKS трябва да бъде поставен както е като JSON текст. Възстановяване автоматично от URL jwks_uri или крайна точка на OIDC не се извършва отстрани сървър, за да избегнете неочаквани изходящи повиквания.
  • Личните ключове не трябва да се показват в публичен JWKS и този инструмент не извлича отколкото публичните компоненти, дори ако е наличен частен ключ.

Как да го използвате

  1. Извлечете JWKS на предавателя, който искате да проверите. За доставчик на OIDC, адресът обикновено е https://example.com/.well-known/jwks.json или https://example.com/oauth2/jwks.
  2. Копирайте целия JSON документ (обекта, съдържащ ключа keys).
  3. Поставете го в полето за въвеждане на инструмента и започнете анализа.
  4. За всеки JWKS ключ инструментът показва неговия kid, неговия kty, неговия alg, неговата употреба и публичният ключ, преобразуван във формат PEM.
  5. Щракнете върху „копиране“, за да извлечете PEM и да го използвате в скрипт за проверка, в нашия JWT Verifier или във всеки съвместим инструмент OpenSSL.

Често задавани въпроси

Къде мога да намеря JWKS на доставчик на OIDC?

По-голямата част от доставчиците на OpenID Connect публикуват документ за откриване на https://example.com/.well-known/openid-configuration. Този JSON съдържа поле jwks_uri, който сочи към действителния JWKS. Някои доставчици обслужват директно JWKS на https://example.com/.well-known/jwks.json или на OAuth2 крайна точка посветен. Изтеглете съдържанието и го поставете тук, както е.

Защо детето е важно?

kid (ID на ключа) е идентификаторът, който заглавката на JWT поставя в собственото си поле kid, за да посочите кой JWKS ключ трябва да се използва за проверка. Без това идентификатор, потребителят ще трябва да опита всеки ключ от JWKS, което усложнява диагностиката чрез случай на грешка. Следователно присъствието на kid на ключ се счита за добро практичен и всички сериозни IdP публикуват такъв.

Каква е разликата между kty=RSA и kty=EC?

RSA е историческото семейство от асиметрични подписи, използвани с RS256, RS384, RS512. The ключовете се описват с модул n и експонент e. EC (елиптичен Curve) е по-нов и дава по-къси подписи за еквивалентно ниво на сигурност. EC ключовете се описват с една крива (crv = P-256, P-384 или P-521) и две x и y координати. Този инструмент преобразува и двете семейства в PEM.

Как да използвате извлечения PEM за проверка на JWT?

Копирайте PEM, след което го поставете в полето „публичен ключ“ на нашия JWT Verifier с JWT за валидиране. Можете също така използвайте го от командния ред с openssl dgst, от Node.js с crypto.verify, от Python с криптография или PyJWT, от Java с JCA и т.н. PEM форматът е универсално признат.

Моят JWKS съдържа ключ Ed25519 (OKP), защо не е преобразуван?

Преобразуването на OKP ключове (Ed25519, Ed448, X25519, X448) изисква логика специфичен и DER кодиране, различно от това на RSA и EC ключовете. Тази версия на инструмента не го прави поддържа само RSA и EC. Докладват се неуправлявани ключове индивидуално със съобщение за грешка, без да блокира анализа на други JWKS записи.

Можем ли да извлечем JWKS от URL, вместо да го поставим?

Не в тази версия. Инструментът не прави никакви изходящи HTTP повиквания, за да остане бърз и избягван да действа като непреднамерен прокси. Изтеглете JWKS от вашия браузър или с curl https://example.com/.well-known/jwks.json след това поставете съдържанието в полето влизане.

Пример за заявка

curl -X POST https://cdrn.fr/api/v1/tools/jwks-inspector/execute \
  -H "Content-Type: application/json" \
  -d '{"jwks":"..."}'

Входна схема

Поле Тип Задължително По подразбиране
jwks text

Крайни точки

  • GET https://cdrn.fr/api/v1/tools - изброява всички достъпни инструменти
  • GET https://cdrn.fr/api/v1/tools/jwks-inspector - извлича схемата на този инструмент
  • POST https://cdrn.fr/api/v1/tools/jwks-inspector/execute - изпълнява този инструмент с JSON payload