본문으로 건너뛰기
AZ Tools

JWK ↔ PEM 변환기

인증 제공자는 서명 키를 JWKS로 공개합니다. base64url 숫자로 가득한 JSON 문서죠. 그런데 토큰을 검증하는 라이브러리는 대부분 PEM을 원합니다. 같은 키를 전혀 다른 모양으로 기술하는 두 형식이라, 필요 이상으로 자주 손으로 다리를 놓게 됩니다. 이 도구는 양방향으로 변환합니다. JWK, JWKS 전체, 또는 하나 이상의 PEM 공개키를 붙여넣으면 각 키가 반대 형식으로 나오고, 그 키가 실제로 무엇인지도 함께 보여줍니다. 키 종류, RSA 길이나 타원곡선, 키가 선언한 알고리즘과 용도, 그리고 RFC 7638 thumbprint까지요. thumbprint는 어떤 필드가 함께 실려 있든 상관없이 키 자체를 식별하는 정규화된 지문입니다. 변환은 ASN.1을 손으로 조립하는 대신 브라우저의 WebCrypto 구현이 직접 수행합니다. 브라우저에서 서명을 검증하는 바로 그 코드가 만들어낸 바이트라는 뜻입니다. 업로드되는 것은 없고, 붙여넣은 JWK에 개인키 요소가 들어 있으면 다른 처리를 하기 전에 먼저 제거하고 그 사실을 알려줍니다.

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

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

사용법

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

자주 묻는 질문

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로 이뤄지고 서버로 전송되는 것은 없습니다.

관련 도구