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.
Бесплатный онлайн-инструмент — сканер безопасности сайта: результат мгновенно, без регистрации.
/.well-known/jwks.jsonkid, старый оставляет 30 дней для overlap{
"keys": [
{ "kty": "RSA", "kid": "abc123", "use": "sig", "alg": "RS256",
"n": "0vx7agoe...", "e": "AQAB" }
]
}JSON Web Key (JWK) — это формат, используемый для представления криптографических ключей в виде JSON-объектов. JWK поддерживает разные алгоритмы, такие как RSA и ECC, и позволяет безопасно обмениваться ключами между сервисами. Стандарт JWK описан в RFC 7517 и является частью экосистемы JSON Web Tokens (JWT). Ключи JWK могут быть представлены в виде открытых или закрытых ключей и включают такие параметры, как kty (тип ключа), use (назначение) и kid (идентификатор ключа).
Формат 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 для аутентификации с помощью 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. Это позволяет разделить процесс подписания и верификации, обеспечивая безопасность и гибкость в управлении ключами.
Инструмент проверяет HTTP-заголовки безопасности, конфигурацию SSL/TLS, утечки серверной информации и защиту от распространённых атак (XSS, clickjacking, MIMEsniffing). Оценка от A до F показывает общий уровень защиты.
Проверка Content-Security-Policy, HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy и других.
Версия TLS, срок сертификата, цепочка доверия, поддержка HSTS.
Поиск раскрытых серверных версий, debug-режимов, открытых конфигов и директорий.
Детальный отчёт с объяснением каждой проблемы и конкретными шагами для исправления.
аудит HTTP-заголовков
проверка конфигурации
CSP и HSTS настройка
соответствие стандартам
Strict-Transport-Security.Server: Apache/2.4.52 помогает атакующим подобрать эксплойт. Скройте версию.DENY или SAMEORIGIN.nosniff браузер может интерпретировать файлы неправильно (MIME sniffing).Content-Security-Policy-Report-Only, мониторьте нарушения, затем включите.Server, X-Powered-By, X-AspNet-Version из ответов.История security-проверок и мониторинг HTTP-заголовков безопасности.
Зарегистрироваться (FREE)JWK — JSON, легко парсится в JS/Python. PEM — traditional base64. JWT с JWKS = standard OAuth path.
Generate new key → publish в JWKS с новым kid → wait 30 days пока clients обновят cache → remove old.
Library типа jose (Node), python-jose, PHP firebase/php-jwt с getKeyById callback.
Бесплатный тариф — 10 мониторов, проверки каждые 5 мин, без карты. Платные тарифы — интервал от 1 минуты и проверки из нескольких регионов.