Ir para o conteúdo
AZ Tools

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

  1. Cole um JWK, um documento JWKS ou uma chave pública PEM.
  2. Leia os detalhes: tipo de chave, tamanho ou curva e o algoritmo declarado.
  3. Copie o PEM para uma biblioteca que o peça, ou o JWK para um JWKS.
  4. Use a impressão digital para confirmar que duas cópias são mesmo a mesma chave.
  5. 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