Skip to content
EN

Что такое JWK

Коротко:

JWK (JSON Web Key, RFC 7517) — JSON-представление cryptographic key (RSA, EC, AES). Используется в OAuth 2.0 и OpenID Connect для публикации public keys, которыми подписаны JWT. JWKS (JSON Web Key Set) — URL вида https://provider.com/.well-known/jwks.json, содержит массив текущих keys. Client fetchит JWKS, находит key по kid (key ID) → verifies JWT signature.

Ниже: подробности, пример, смежные термины, FAQ.

Проверить безопасность сайта →

Подробности

  • Структура: kty (Key Type), use (sig/enc), kid (Key ID), n/e (RSA) или x/y/crv (EC)
  • JWKS endpoint: /.well-known/jwks.json
  • Rotation: provider добавляет new key с новым kid, старый оставляет 30 дней для overlap
  • Client caches JWKS для снижения нагрузки на provider
  • Безопасность: НИКОГДА не публикуйте private key (d параметр в JWK)

Пример

{
  "keys": [
    { "kty": "RSA", "kid": "abc123", "use": "sig", "alg": "RS256",
      "n": "0vx7agoe...", "e": "AQAB" }
  ]
}

Смежные термины

TL;DR: Что такое JWK?

JSON Web Key (JWK) — это формат, используемый для представления криптографических ключей в виде JSON-объектов. JWK поддерживает разные алгоритмы, такие как RSA и ECC, и позволяет безопасно обмениваться ключами между сервисами. Стандарт JWK описан в RFC 7517 и является частью экосистемы JSON Web Tokens (JWT). Ключи JWK могут быть представлены в виде открытых или закрытых ключей и включают такие параметры, как kty (тип ключа), use (назначение) и kid (идентификатор ключа).

Структура JSON Web Key

Формат JWK описывает ключи в виде JSON-объектов, которые включают несколько ключевых параметров. Основные элементы JWK:

  • kty — тип ключа (например, RSA, EC);
  • alg — алгоритм, используемый для подписи или шифрования;
  • use — назначение ключа (например, sig для подписи или enc для шифрования);
  • kid — идентификатор ключа, используемый для выбора ключа из набора;
  • n и e — параметры для RSA-ключей;
  • x и y — координаты для EC-ключей.

Пример JWK для RSA-ключа:

{"kty":"RSA","n":"...","e":"...","alg":"RS256","use":"sig","kid":"1234"}

При использовании JWK важно следить за безопасностью ключей и управлять ими, чтобы избежать компрометации данных.

Пример использования JWK в приложении

Рассмотрим практический пример использования JWK для аутентификации с помощью JSON Web Tokens (JWT). Предположим, что у вас есть сервер, который генерирует JWT с использованием RSA-ключа. Для этого вам потребуется создать JWK, который будет содержать открытый ключ для верификации токенов.

Во-первых, вам нужно сгенерировать пару ключей RSA. Для этого можно использовать команду OpenSSL:

openssl genpkey -algorithm RSA -out private_key.pem -pkeyopt rsa_keygen_bits:2048

Затем получите открытый ключ:

openssl rsa -pubout -in private_key.pem -out public_key.pem

После этого вы можете преобразовать открытый ключ в формат JWK. Существует множество библиотек, которые могут помочь в этом, например, SuperTokens или jwk-to-pem. Пример кода на JavaScript:

const jwk = {"kty":"RSA","n":"...","e":"...","alg":"RS256","use":"sig","kid":"1234"};

Теперь ваш сервер может использовать этот JWK для генерации JWT. Например, с помощью библиотеки jsonwebtoken:

const jwt = require('jsonwebtoken');
const token = jwt.sign({ data: 'someData' }, privateKey, { algorithm: 'RS256', keyid: '1234' });

Для верификации JWT на клиенте вам нужно будет использовать открытый ключ, который был представлен в виде JWK. Это позволяет разделить процесс подписания и верификации, обеспечивая безопасность и гибкость в управлении ключами.

ЗаголовкиCSP, HSTS, X-Frame-Options и др.
SSL/TLSШифрование и сертификат
КонфигурацияСерверные настройки и утечки
Оценка A-FОбщий балл безопасности

Почему нам доверяют

OWASP
рекомендации
15+
заголовков безопасности
<2с
результат
A–F
оценка безопасности

Как это работает

1

Введите URL сайта

2

Анализ заголовков безопасности

3

Получите оценку A–F

Что проверяет анализ безопасности?

Инструмент проверяет HTTP-заголовки безопасности, конфигурацию SSL/TLS, утечки серверной информации и защиту от распространённых атак (XSS, clickjacking, MIMEsniffing). Оценка от A до F показывает общий уровень защиты.

Анализ заголовков

Проверка Content-Security-Policy, HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy и других.

Проверка SSL

Версия TLS, срок сертификата, цепочка доверия, поддержка HSTS.

Обнаружение утечек

Поиск раскрытых серверных версий, debug-режимов, открытых конфигов и директорий.

Отчёт с рекомендациями

Детальный отчёт с объяснением каждой проблемы и конкретными шагами для исправления.

Кому это нужно

Специалисты по безопасности

аудит HTTP-заголовков

DevOps

проверка конфигурации

Разработчики

CSP и HSTS настройка

Аудиторы

соответствие стандартам

Частые ошибки

Нет Content-Security-PolicyCSP — главная защита от XSS. Без него инъекция скриптов значительно проще.
Нет заголовка HSTSБез HSTS возможна downgrade-атака с HTTPS на HTTP. Включите Strict-Transport-Security.
Server header раскрывает версиюServer: Apache/2.4.52 помогает атакующим подобрать эксплойт. Скройте версию.
X-Frame-Options не установленСайт можно встроить в iframe для clickjacking-атаки. Установите DENY или SAMEORIGIN.
Нет X-Content-Type-OptionsБез nosniff браузер может интерпретировать файлы неправильно (MIME sniffing).

Лучшие практики

Начните с базовых заголовковМинимум: HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy. Займёт 5 минут.
Внедрите CSP постепенноНачните с Content-Security-Policy-Report-Only, мониторьте нарушения, затем включите.
Скройте серверные заголовкиУдалите Server, X-Powered-By, X-AspNet-Version из ответов.
Настройте Permissions-PolicyОграничьте доступ к камере, микрофону, геолокации — только то, что реально используется.
Проверяйте после каждого деплояЗаголовки безопасности могут быть перезаписаны при обновлении конфигурации сервера.

Получите больше с бесплатным аккаунтом

История security-проверок и мониторинг HTTP-заголовков безопасности.

Зарегистрироваться (FREE)

Больше по теме

Часто задаваемые вопросы

JWK vs x509 PEM cert?

JWK — JSON, легко парсится в JS/Python. PEM — traditional base64. JWT с JWKS = standard OAuth path.

Как ротировать keys?

Generate new key → publish в JWKS с новым kid → wait 30 days пока clients обновят cache → remove old.

Как проверить JWT с JWKS?

Library типа jose (Node), python-jose, PHP firebase/php-jwt с getKeyById callback.

Запустить инструмент, который описан в этой статье

Бесплатный тариф — 10 мониторов, проверки каждые 5 мин, без карты. Платные тарифы — интервал от 1 минуты и проверки из нескольких регионов.