서버/클라이언트 인증서 확인할 일이 종종 있는데 그때마다 openssl로 -text -noout 붙여서 터미널에 뽑아보는 게 귀찮았음. 유효기간이랑 SAN 정도만 빠르게 보고 싶은 건데 매번 명령어 치는 게 번거로워서, 붙여넣기만 하면 바로 파싱해주는 도구를 하나 만들어봄.
바로 써볼 수 있게 위젯부터 올려둠. PEM 인증서를 붙여넣으면 브라우저 안에서 바로 파싱됨 (서버로 전송 안 됨).
X.509 인증서 파서
PEM 형식 인증서를 붙여넣으면 자동으로 항목을 나눠 보여줌.
1. X.509 인증서란
공개키 인증서의 표준 포맷임. 웹사이트 자물쇠 아이콘 눌렀을 때 나오는 그 인증서가 X.509 형식이고, PEM(-----BEGIN CERTIFICATE-----로 시작하는 텍스트)은 이 인증서를 base64로 인코딩해서 텍스트로 담아둔 것. 안에는 주체, 발급자, 유효기간, 공개키 같은 정보가 ASN.1 규칙으로 인코딩되어 들어있음.
2. 사용한 라이브러리 jsrsasign
직접 ASN.1 파서 짜는 건 시간이 너무 오래 걸릴 것 같아서 jsrsasign이라는 오픈소스 라이브러리 갖다 씀. 순수 자바스크립트로 되어있고 X.509 파싱뿐만 아니라 RSA/ECDSA 서명, JWT 검증까지 되는 꽤 오래되고 검증된 라이브러리임. CDN으로 스크립트 한 줄만 불러오면 돼서 빌드 과정 없이 html 파일 하나로 끝남.
<script src="https://cdnjs.cloudflare.com/ajax/libs/jsrsasign/11.1.3/jsrsasign-all-min.js"></script>
3. 뽑아주는 정보
붙여넣으면 아래 항목들을 카드로 정리해줌.
| 항목 | 설명 |
| Subject / Issuer | 인증서 주체와 발급자 |
| 일련번호 | 인증서 고유 시리얼 넘버 |
| 서명 알고리즘 | SHA256withRSA 같은 서명 방식 |
| 유효기간 | notBefore ~ notAfter, 남은 일수(D-day)까지 표시 |
| 공개키 정보 | RSA 비트수 또는 EC 커브명 |
| SHA-256 / SHA-1 지문 | 인증서 fingerprint |
| SAN | 대체 도메인/IP 목록 |
| Key Usage, Basic Constraints | 인증서 용도 관련 확장 필드 |
여러 개를 이어서 붙이면(체인 인증서) 자동 인식해서 리프 인증서부터 상위 인증서까지 순서대로 나눠서 보여줌. 체인 검증하다가 중간 인증서 빠뜨린 건 아닌지 볼 때 나름 쓸모 있을 듯.
4. 유효기간 표시
만료일까지 남은 날짜 계산해서 상태를 4단계로 나눔.
- 정상: D-30 넘게 남음
- 만료 임박: D-30 이내
- 만료됨: D+로 표시, notAfter 지남
- 발급 예정: notBefore 이전
인증서 여러 개 관리하다 보면 갱신 시기 놓치는 경우가 종종 있어서 색으로 한눈에 구분되게 해둠.
5. 티스토리에 넣기
만든 거 로컬에 두기 아까워서 티스토리 글에 바로 넣어봄. 글쓰기 화면에서 기본 에디터 대신 HTML 모드로 전환한 다음 <div>, <style>, <script> 태그 통째로 붙여넣으면 됨. 파싱은 전부 브라우저에서 처리되고 입력한 인증서 내용이 어디로 전송되지도 않아서 데모용으로 넣어놓기 부담 없었음.
파싱 자체는 라이브러리가 다 해주는 거라 코드는 짧게 끝났는데, 오히려 상태 나누고 카드 레이아웃 잡는 게 더 오래 걸림. 인증서 만료로 장애 겪어본 사람이면 하나쯤 만들어두면 나쁘지 않을 듯.
'프로그래밍' 카테고리의 다른 글
| Base64 인코더 디코더 온라인에서 하기 (0) | 2026.07.26 |
|---|---|
| uuid v4 랜덤 기반 UUID의 정의 구성 및 예제 코드 (2) | 2025.02.13 |
| WPF RichTextBox 행간격 조절 RichTextBox Control (1) | 2024.02.27 |
| cdecl과 stdcall의 차이점 __cdecl과 __stdcall 비교 (1) | 2024.01.09 |
| [엑셀 코딩] MIDB 사용 방법 및 파서 만들기 (0) | 2022.11.13 |