Conversor de JWK para PEM (e vice-versa)
Os fornecedores de identidade publicam as suas chaves de assinatura como um JWKS: um documento JSON cheio de números em base64url. Quase todas as bibliotecas que verificam um token querem antes um PEM, e os dois formatos descrevem a mesma chave de maneiras completamente diferentes, por isso a ponte acaba por ser feita à mão mais vezes do que devia. Esta ferramenta converte nos dois sentidos. Cole um JWK, um JWKS completo, ou uma ou mais chaves públicas PEM, e cada chave volta no outro formato juntamente com o que é na realidade: tipo de chave, tamanho RSA ou curva elíptica, o algoritmo e o uso caso a chave os declare, e a impressão digital RFC 7638 — a impressão canónica que identifica uma chave independentemente dos campos que a acompanhem. A conversão é feita pela própria implementação WebCrypto do navegador em vez de montar ASN.1 à mão, por isso os bytes vêm do mesmo código que verifica assinaturas no seu navegador. Nada é enviado e, se um JWK colado contiver material de chave privada, os membros privados são removidos antes de tudo o resto, com um aviso.
Apenas chaves públicas. Os membros privados são removidos antes da leitura e nada é enviado.
Cole um JWK, um JWKS ou uma chave pública PEM para converter.
Como usar
- Cole um JWK, um documento JWKS ou uma chave pública PEM.
- Leia os detalhes: tipo de chave, tamanho ou curva e o algoritmo declarado.
- Copie o PEM para uma biblioteca que o peça, ou o JWK para um JWKS.
- Use a impressão digital para confirmar que duas cópias são mesmo a mesma chave.
- Cole vários blocos PEM de uma vez para converter um conjunto inteiro.
Perguntas frequentes
- O que é a impressão digital RFC 7638?
- Um hash SHA-256 sobre um objeto JSON canónico que contém apenas os membros que definem a chave — no RSA são e, kty e n, por essa ordem e sem espaços. Como tudo o resto fica de fora, duas cópias da mesma chave dão a mesma impressão ainda que uma traga kid, alg e use e a outra não.
- A impressão digital é o mesmo que o kid?
- Não necessariamente. O kid é o nome que o emissor decidiu dar à chave e pode ser qualquer coisa. Muitos emissores usam a impressão RFC 7638 como kid, e por isso coincidem com frequência, mas nada o obriga.
- Posso converter uma chave privada?
- Não. Se um JWK colado tiver membros privados, são removidos antes de a chave ser lida e só a parte pública é convertida. Em nenhum caso é enviado seja o que for, mas uma chave privada não pertence a uma página web.
- Que tipos de chave funcionam?
- RSA e as curvas NIST P-256, P-384 e P-521, além de Ed25519 onde o navegador o suporte. Curvas que o WebCrypto não implementa — a secp256k1, por exemplo — não podem ser convertidas aqui.
- Porque é que o JWK resultante não tem alg?
- Porque um PEM não o transporta. Para ler a chave é preciso indicar um algoritmo ao importá-la, por isso qualquer alg no resultado seria uma suposição desta ferramenta e não algo que a chave afirmasse; é por isso removido.
- A minha chave é enviada?
- Não. A conversão corre no seu navegador com o WebCrypto integrado e nada é enviado para um servidor.
Ferramentas relacionadas
Conversor de Base64 para hexadecimal (e volta)
Converta uma string Base64 em bytes hexadecimais e hex de volta para Base64, com suporte URL-safe, no seu navegador.
Decodificador JWT
Decodifique um JSON Web Token para inspecionar cabeçalho, claims e expiração.
Gerador de JWT
Construa e assine JWTs HS256 / HS384 / HS512 a partir de um header e payload — par do JWT Decoder.
Conversor Punycode
Converta domínios internacionalizados entre Unicode (`münchen.de`) e ASCII Punycode (`xn--mnchen-3ya.de`).
Codificador e decodificador Base45
Codifique texto para Base45 e decodifique Base45 de volta para texto, seguindo a RFC 9285, no seu navegador.
Codificador e Decodificador Quoted-Printable
Codifique texto para MIME Quoted-Printable (RFC 2045) ou decodifique — com escapes =XX, quebras de linha suaves e UTF-8 — tudo no seu navegador, com quebra de linha em 76 caracteres ao codificar.