JWK ⇄ PEM 키 변환기
실제 Web Crypto API를 사용하여 JWK와 PEM 형식 간에 암호화 키를 변환하고, 알고리즘/곡선/크기를 디코딩하고, RFC 7638 JWK 지문을 계산합니다.
결과
JWK(JSON 웹 키) 및 PEM 인코딩 키는 JWT 라이브러리, TLS 도구 및 OAuth/OIDC 구성 전반에 걸쳐 상호 교환적으로 표시되지만 둘 사이를 직접 변환한다는 것은 base64 디코딩 DER 구조 또는 JSON 형식을 다시 지정하는 것을 의미하므로 미묘하게 잘못되기 쉽습니다. 이 도구는 텍스트 조작 대신 브라우저의 실제 Web Crypto API를 사용하여 변환을 수행합니다. 붙여넣은 PEM 블록은 crypto.subtle.importKey('spki'|'pkcs8', ...)를 사용하여 가져오고 importKey('jwk', ...)를 사용하여 JWK로 다시 내보냅니다. 붙여넣은 JWK는 importKey('jwk', ...)를 사용하여 가져오고 SPKI 또는 PKCS8 DER로 다시 내보낸 다음 올바른 PEM 헤더에 래핑됩니다. 브라우저 자체가 키 자료의 유효성을 검사하고 디코딩하기 때문에 잘못된 키 또는 일치하지 않는 알고리즘 선택은 자동으로 쓰레기를 생성하는 대신 큰 소리로 실패합니다.
지원되는 알고리즘은 RSA(RSASSA-PKCS1-v1_5), P-256/P-384/P-521 곡선의 EC, 그리고 브라우저가 이를 구현하는 경우 Ed25519 및 X25519입니다. Web Crypto의 Ed25519/X25519에 대한 브라우저 지원은 여전히 엔진 간에 일관되지 않으므로 사용자 에이전트 문자열에서 추측하는 대신 도구는 선택한 곡선에 대해 실제 crypto.subtle.generateKey() 프로브를 실행하고 조작된 결과를 반환하는 대신 여기에서 지원되지 않는지 명확하게 알려줍니다.
모든 변환은 키의 실제 메타데이터도 디코딩합니다. RSA 키의 경우 CryptoKey 개체에서 직접 모듈러스 비트 길이와 해시 알고리즘을 얻습니다. EC 및 OKP 키의 경우 명명된 곡선입니다. 모든 키에 대해 RFC 7638 JWK 지문 — 엄격한 사전순으로 직렬화된 JWK 필수 멤버의 SHA-256 해시입니다(RSA의 경우 e/kty/n, EC의 경우 crv/kty/x/y, OKP/Ed25519/X25519의 경우 crv/kty/x). 이 지문은 많은 시스템에서 키의 "키드" 식별자로 사용하는 것이며, 멤버 순서를 잘못 입력하면 완전히 다른 해시가 생성됩니다. 이는 바로 수동 구현에서 발생하기 쉬운 실수입니다.
모든 것이 브라우저 탭의 crypto.subtle을 통해 실행되기 때문에 개인 키 자료는 장치를 떠나지 않습니다. 변환 중 어떤 시점에서도 서버, 업로드 및 외부 API 호출이 필요하지 않습니다.