OpenSSL 명령어를 실행하는 것이 지겨워서 JWK 생성을 위한 CLI를 만들었습니다

발행: (2026년 2월 27일 오후 05:46 GMT+9)
5 분 소요
원문: Dev.to

Source: Dev.to

소개

개발자만이 느낄 수 있는 일종의 좌절감이 있습니다. 비교적 간단한 작업을 해야 하는데, 도구가 여러 수동 단계와 매번 구글링해야 하는 터미널 명령어, 그리고 형식이 맞는지 확신할 수 없는 출력 파일을 강요할 때 말이죠.

문제점

키를 JWK (JSON Web Key) 형식으로 제공해야 하는 서비스와 통합하고 있었습니다. PEM 형식이 아니라요.
OpenSSL을 사용해 키 쌍을 생성하는 방법은 이미 알고 있었습니다:

# Generate a private EC key
openssl ecparam -name prime256v1 -genkey -noout -out private.pem

# Derive the public key
openssl ec -in private.pem -pubout -out public.pem

하지만 그 PEM 파일들을 JWK로 변환하는 일은 번거로웠습니다. 일회성 Node.js 스크립트를 작성해 JWK 객체를 수동으로 만들고, kty, crv, x, y, d 필드를 두 번 확인한 뒤 출력을 저장했죠. 동작은 했지만, 이 과정을 반복해야 한다는 걸 알고 있었습니다.

해결책: jwk-cli-tool

저는 **jwk-cli-tool**이라는 인터랙티브 CLI를 만들었습니다. 전체 워크플로를 한 번에 처리합니다:

  • 새로운 PEM 키 쌍(EC 또는 RSA) 생성
  • PEM 파일을 JWK JSON 형식으로 변환
  • 두 단계를 하나의 흐름으로 수행

이 도구는 네 개의 파일을 생성합니다:

  • *.private.pem
  • *.public.pem
  • *.private.jwk.json
  • *.public.jwk.json

지원 알고리즘

유형알고리즘
ECES256, ES384, ES512
RSARS256, RS384, RS512

설치 및 사용법

설치는 필요 없습니다. npx로 도구를 실행하세요:

npx jwk-cli-tool

인터랙티브 메뉴가 표시됩니다:

? What would you like to do?
> Generate new PEM key pair
  Generate JWK JSON files
  Exit

여기서 할 수 있는 일:

  1. 키 이름 지정
  2. 알고리즘 선택
  3. keys 폴더에 있는 기존 파일을 사용할지, 새 PEM 파일을 생성할지 선택

생성된 파일은 다음 위치에 저장됩니다:

  • keys/ – PEM 파일용
  • outputs/ – JWK JSON 파일용

두 디렉터리는 존재하지 않을 경우 자동으로 생성됩니다. 동일한 키 이름이 이미 존재하면, CLI가 덮어쓰기 전에 확인을 요청합니다.

예시 출력

ES256 키에 대한 흐름을 실행하면 다음과 같은 공개 JWK가 생성됩니다:

{
  "kty": "EC",
  "use": "sig",
  "alg": "ES256",
  "kid": "myapp",
  "crv": "P-256",
  "x": "f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU",
  "y": "x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0"
}

개인 JWK는 위 필드에 d 파라미터가 추가된 형태입니다.

구현 세부 사항

  • Node.jsTypeScript로 구축
  • 텍스트 기반 UI를 위해 @inquirer/prompts 사용
  • 외부 암호화 의존성을 최소화하기 위해 Node 내장 crypto 모듈 활용

도구는 process.cwd()에 파일을 기록하므로, npx jwk-cli-tool을 실행하는 디렉터리 어디에서든 keys/outputs/ 폴더가 해당 위치에 생성됩니다.

오픈 소스

  • GitHub:
  • npm:

기여

Pull request와 피드백을 환영합니다. 추가 알고리즘이나 기능(예: EdDSA/Ed25519, JWKS 배열 출력, CI 파이프라인용 비인터랙티브 모드)이 필요하면 이슈를 열어 주세요.

때때로 최고의 도구는 스스로의 문제를 해결하면서 탄생합니다. 이 도구가 다른 사람에게도 OpenSSL을 구글링하느라 쓰는 30분을 절약해 주길 바랍니다.

0 조회
Back to Blog

관련 글

더 보기 »

과거와의 마지막 춤🕺

소개 안녕하세요 dev.to 커뮤니티! 일주일 전에 저는 저를 소개하고, 웹 개발을 떠나 cryptograph에 집중하기 위해...