[사이드프로젝트][x509Lab] 브라우저에서 기존 운영 중인 CA 인증서로 하위 노드만 서명해 발급하기
안녕하세요. 퇴근 후 육퇴를 마치고 밤마다 사이드 프로젝트를 깎고 있는 로켓다람쥐입니다.
웹에서 인증서 트리를 시각적으로 그리고 발급해 볼 수 있는 x509Lab이라는 툴을 만들고 있는데요. 제가 직접 쓰다가 너무 불편한 점을 발견해서 이번 주말에 부랴부랴 업데이트를 하나 했습니다.

인프라나 서버 작업하다 보면 이미 멀쩡하게 운영 중인 Root CA나 Intermediate CA가 있고, 거기에 물리는 로컬 테스트용 Leaf 인증서 하나만 새로 구워야 하는 상황이 꽤 자주 생깁니다.
근데 제가 만든 툴이지만, 예전에는 생성 버튼을 누르면 무조건 Root부터 새로 다 발급해버리더라고요.
기존 인증서를 캔버스에 올려놔도 그냥 무시하고 덮어씌워버리는 멍청한 구조였습니다.
그래서 이번 v1.3.0에서는 기존 인증서를 재활용하는 기능을 넣었습니다.
사용 흐름은 이렇습니다.
캔버스에서 트리를 이어준 다음, 기존에 쓰시던 Root나 Intermediate 노드에 인증서(PEM)를 업로드합니다.

그러면 노드에 키 추가라는 버튼이 활성화되는데, 여기에 서명에 쓸 개인키를 넣어주시면 됩니다.

그 상태로 생성 버튼을 누르면, 키가 들어있는 상위 노드들은 새로 발급하지 않고 패스한 뒤 제일 밑에 있는 Leaf 인증서만 기존 개인키로 예쁘게 서명해서 만들어줍니다.
생성 모달창에서도 헷갈리지 않게 색깔로 구분을 해뒀습니다.
초록색은 인증서랑 키가 다 있어서 패스하는 노드,
노란색은 인증서는 올렸는데 서명할 키가 없어서 키를 달라고 경고하는 노드입니다.
노란색이 뜨면 모달 안에서 바로 키를 붙여넣을 수도 있습니다.

아, 그리고 개발자 커뮤니티인 만큼 당연히 우려하실 보안 부분도 덧붙입니다. 웹에 개인키를 올리는 구조라 찝찝하실 수 있는데, 이 앱은 백엔드가 아예 없는 순수 프론트엔드 툴입니다.
올리신 개인키는 네트워크를 타지 않고 현재 브라우저 메모리 안에서 Web Crypto API로 서명 연산에만 쓰인 뒤 창을 닫으면 완전히 날아갑니다.
사내망 테스트용이나 mTLS 구조 잡으실 때 OpenSSL 명령어 치기 귀찮으시다면 브라우저에서 가볍게 써보시면 좋을 것 같습니다.
x509Lab Link : https://x509lab.vercel.app/
네이버 블로그 : https://blog.naver.com/hjinha2/224260514643
현업에서 인프라나 보안 다루시는 분들이 보시기에 이런 기능도 있었으면 좋겠다 싶은 게 있다면 언제든 뼈 때리는 조언 부탁드립니다. 읽어주셔서 감사합니다.