본문으로 건너뛰기
AZ Tools

JWK ↔ PEM 변환기

JWK이나 JWKS 전체를 PEM 공개키로, 또는 그 반대로 변환하고 각 키의 RFC 7638 thumbprint까지 브라우저에서 계산합니다.

공개키만 넣으세요. 개인키 요소는 읽기 전에 제거되며 업로드되는 것은 없습니다.

JWK, JWKS 또는 PEM 공개키를 붙여넣으면 변환됩니다.

사용법

  1. JWK, JWKS 문서, 또는 PEM 공개키를 붙여넣으세요.
  2. 키 종류, 길이나 곡선, 선언된 알고리즘을 확인하세요.
  3. PEM이 필요한 라이브러리에는 PEM을, JWKS에는 JWK를 복사해 쓰세요.
  4. 두 사본이 정말 같은 키인지 확인할 땐 thumbprint를 비교하세요.
  5. PEM 블록을 여러 개 붙여넣으면 한 번에 변환됩니다.

자세한 설명

펼치기

인증 제공자는 서명 키를 JWKS로 공개합니다. base64url 숫자로 가득한 JSON 문서죠. 그런데 토큰을 검증하는 라이브러리는 대부분 PEM을 원합니다. 같은 키를 전혀 다른 모양으로 기술하는 두 형식이라, 필요 이상으로 자주 손으로 다리를 놓게 됩니다.

이 도구는 양방향으로 변환합니다. JWK, JWKS 전체, 또는 하나 이상의 PEM 공개키를 붙여넣으면 각 키가 반대 형식으로 나오고, 그 키가 실제로 무엇인지도 함께 보여줍니다. 키 종류, RSA 길이나 타원곡선, 키가 선언한 알고리즘과 용도, 그리고 RFC 7638 thumbprint까지요. thumbprint는 어떤 필드가 함께 실려 있든 상관없이 키 자체를 식별하는 정규화된 지문입니다.

변환은 ASN.1을 손으로 조립하는 대신 브라우저의 WebCrypto 구현이 직접 수행합니다. 브라우저에서 서명을 검증하는 바로 그 코드가 만들어낸 바이트라는 뜻입니다. 업로드되는 것은 없고, 붙여넣은 JWK에 개인키 요소가 들어 있으면 다른 처리를 하기 전에 먼저 제거하고 그 사실을 알려줍니다.

자주 묻는 질문

RFC 7638 thumbprint가 뭔가요?

키를 정의하는 필수 요소만 담은 정규화된 JSON에 SHA-256을 적용한 값입니다. RSA라면 e, kty, n을 그 순서로, 공백 없이 담습니다. 나머지가 모두 제외되기 때문에, 한쪽에는 kid·alg·use가 있고 다른 쪽에는 없어도 같은 키라면 같은 thumbprint가 나옵니다.

thumbprint와 kid는 같은 건가요?

꼭 그렇지는 않습니다. kid는 발급자가 그 키를 부르기로 정한 이름일 뿐이고 무엇이든 될 수 있습니다. 많은 발급자가 RFC 7638 thumbprint를 kid로 쓰기 때문에 자주 일치하지만, 그래야 한다는 규정은 없습니다.

개인키도 변환할 수 있나요?

아니요. 붙여넣은 JWK에 개인키 요소가 있으면 키를 읽기 전에 제거하고 공개키만 변환합니다. 어느 쪽이든 업로드되지는 않지만, 개인키는 웹 페이지에 넣을 것이 아닙니다.

어떤 키 종류를 지원하나요?

RSA와 NIST 곡선 P-256, P-384, P-521, 그리고 브라우저가 지원하는 경우 Ed25519입니다. WebCrypto가 구현하지 않는 곡선(예: secp256k1)은 여기서 변환할 수 없습니다.

변환된 JWK에 alg가 왜 없나요?

PEM에는 alg가 들어 있지 않기 때문입니다. 키를 읽으려면 가져오기 단계에서 알고리즘을 지정해야 하는데, 결과에 alg를 남기면 그건 키가 말한 값이 아니라 이 도구의 가정이 됩니다. 그래서 제거합니다.

키가 업로드되나요?

아니요. 변환은 브라우저 내장 WebCrypto로 이뤄지고 서버로 전송되는 것은 없습니다.

관련 도구