Інспектувати JWKS та витягти публічні ключі PEM
- Панель керування
- Документація
- API
Що таке JWKS?
JWKS (JSON Web Key Set, RFC 7517) — JSON-документ, що групує список публічних ключів у структурованій формі. Він слугує для публікації ключів, які емітент JWT використовує для підпису своїх токенів, щоб будь-який споживач міг їх отримати і перевірити підпис токенів, що він отримує. Формат завжди виглядає так:
{
"keys": [
{ "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 Web Key), що описує публічний ключ: тип ключа (kty), ідентифікатор (kid), призначення (use), цільовий алгоритм (alg) і криптографічні компоненти.
Коли використовується JWKS?
JWKS є хребтом сучасних архітектур OAuth2 і OpenID Connect. Ви зустрінете його в кількох контекстах:
- Виявлення OIDC: кожен постачальник 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(key ID): унікальний ідентифікатор ключа. Це значення, яке заголовок JWT ставить у власне полеkid, щоб вказати, який ключ JWKS слід використовувати для перевірки.kty(key type): криптографічна сім'я. Два домінуючих значення —RSA(класичні RSA-ключі, які використовуються з RS256, RS384, RS512) іEC(еліптичні криві, що використовуються з ES256, ES384, ES512).alg(algorithm): алгоритм підпису, для якого призначений цей ключ. Необов'язкове поле, але часто вказується. Дозволяє швидко відфільтрувати ключі, що використовуються для даного JWT.use: призначення ключа.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 спрощує візуальний diff).
Обмеження та застереження
Цей інструмент підтримує публічні ключі RSA (kty=RSA) і EC (kty=EC на кривих P-256, P-384, P-521). Інші типи (OKP для Ed25519, oct для симетричних ключів) не конвертуються: вони повідомляються з повідомленням про помилку для кожного запису, решта JWKS залишається читабельною.
- Конвертація виконується лише в одному напрямку: JWKS у PEM. Реконструкція JWK з наявного PEM-ключа не покривається цією версією.
- JWKS потрібно вставити як є у вигляді JSON-тексту. Автоматичне отримання з
jwks_uriабо OIDC-ендпоінту не виконується на стороні сервера, щоб уникнути непередбачуваних вихідних дзвінків. - Приватні ключі не повинні з'являтися в публічному JWKS, і цей інструмент витягує лише публічні компоненти, навіть якщо б приватний ключ був присутній.
Як використовувати
- Отримайте JWKS від емітента, якого хочете перевірити. Для OIDC-постачальника адреса зазвичай
https://example.com/.well-known/jwks.jsonабоhttps://example.com/oauth2/jwks. - Скопіюйте весь JSON-документ (об'єкт, що містить ключ
keys). - Вставте його в поле введення інструменту і запустіть аналіз.
- Для кожного ключа JWKS інструмент відображає його
kid,kty,alg,useі публічний ключ, конвертований у формат PEM. - Натисніть "копіювати", щоб отримати 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 є важливим?
kid (key ID) — ідентифікатор, який заголовок JWT поміщає у власне поле kid, щоб вказати, який ключ JWKS слід використовувати для перевірки. Без цього ідентифікатора споживачу довелося б перебирати кожен ключ JWKS, що ускладнює діагностику у разі помилки. Наявність kid для кожного ключа вважається гарною практикою, і всі серйозні IdP публікують його.
Яка різниця між kty=RSA і kty=EC?
RSA — це історична сім'я асиметричних підписів, що використовується з RS256, RS384, RS512. Ключі описуються модулем n і показником e. EC (Elliptic 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 через cryptography або 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