인증서 디코더 - X.509 PEM 인증서 분석 온라인
X.509 PEM 인증서를 디코딩하고 검사합니다. 주체, 발급자, 유효기간, 확장, SAN, 지문을 확인 — 100% 클라이언트 사이드, 서버 전송 없음.
자주 묻는 질문
인증서 디코더란 무엇인가요?
인증서 디코더는 X.509 PEM 인코딩된 디지털 인증서를 파싱하여 사람이 읽을 수 있는 형식으로 표시하는 온라인 도구입니다. X.509 인증서는 안전한 HTTPS 연결을 위한 SSL/TLS에서 사용되는 표준 형식입니다. ASN.1 DER(Distinguished Encoding Rules)로 인코딩되고 PEM(Privacy-Enhanced Mail) 형식으로 Base64 인코딩됩니다. 이 도구는 도메인 이름(Subject), 발급 기관(Issuer), 유효 기간, 공개 키 세부 정보, 보안 확장 등의 주요 정보를 추출합니다. OpenSSL 설치나 명령줄 도구 없이도 사용할 수 있습니다.
이 인증서 디코더를 어떻게 사용하나요?
1. .pem, .crt, .cer 파일이나 웹 서버, 브라우저에서 PEM 인증서를 가져옵니다. 2. PEM 텍스트를 입력 텍스트 영역에 붙여넣습니다. 인증서는 -----BEGIN CERTIFICATE-----로 시작하고 -----END CERTIFICATE-----로 끝나야 합니다. 3. 도구가 자동으로 인증서를 디코딩하여 결과를 표시합니다. 버튼 클릭이 필요 없습니다. 4. 인증서 요약 카드에서 빠른 개요(도메인, 발급자, 만료 상태)를 확인합니다. 5. 상세 정보, 확장, 체인 탭을 통해 더 많은 정보를 확인합니다. 6. 필드 옆의 복사 버튼을 클릭하여 값을 복사합니다. 7. 인증서 체인의 경우 모든 인증서를 순서대로 붙여넣으면 체인 계층 구조를 표시합니다.
인증서 데이터는 안전한가요? 서버로 전송되나요?
인증서 데이터는 100% 안전하며 브라우저를 떠나지 않습니다. ASN.1 디코딩, 확장 추출, 지문 계산 등 모든 인증서 파싱은 JavaScript를 사용하여 완전히 클라이언트 사이드에서 수행됩니다. @peculiar/x509 라이브러리로 ASN.1을 파싱하고, 브라우저의 네이티브 Web Crypto API로 지문을 계산합니다. 어떤 서버로도 데이터가 전송되지 않으며, 분석 도구가 인증서 내용을 추적하지 않고, 브라우저 탭의 메모리 외에 어디에도 데이터가 저장되지 않습니다.
PEM과 DER 형식의 차이점은 무엇인가요?
DER(Distinguished Encoding Rules)은 ASN.1 규칙에 따라 X.509 인증서 데이터를 인코딩하는 원시 바이너리 형식입니다. 사람이 읽을 수 없는 컴팩트한 바이너리 표현입니다. PEM(Privacy-Enhanced Mail)은 DER 데이터를 텍스트로 감싸는 형식입니다. DER 바이트를 Base64로 인코딩하고 -----BEGIN CERTIFICATE-----와 -----END CERTIFICATE----- 마커를 추가합니다. PEM은 텍스트로 안전하게 복사/붙여넣기하고, 구성 파일에 포함할 수 있어 인증서 교환에 가장 많이 사용됩니다. 이 도구는 PEM 형식을 지원합니다.
인증서 체인이란 무엇이며 이 도구에서 어떻게 처리하나요?
인증서 체인(신뢰 체인)은 웹사이트의 리프 인증서를 신뢰할 수 있는 루트 인증 기관(CA)에 연결하는 인증서 시퀀스입니다. 체인은 일반적으로 다음으로 구성됩니다: 1) 리프 인증서 — 도메인 이름이 포함된 서버 자체 인증서, 2) 중간 CA 인증서 — 루트 CA가 서명 권한을 위임하기 위해 발급한 인증서, 3) 루트 CA 인증서 — 신뢰할 수 있는 인증 기관의 자체 서명 인증서. 여러 인증서가 포함된 PEM 블록을 붙여넣으면 이 도구는 각 인증서를 파싱하고 체인 순서대로 표시하며 각 인증서의 위치(리프, 중간, 루트)를 식별합니다.
X.509 v3 확장이란 무엇인가요?
X.509 v3 확장은 인증서에 추가 정보를 전달하는 선택적 필드입니다. 주요 확장에는: 추가 도메인 이름과 IP를 위한 주체 대체 이름(SAN), 허용된 암호화 작업을 위한 키 사용(디지털 서명, 키 암호화), TLS 서버 인증이나 코드 서명 같은 특정 목적을 위한 확장 키 사용, 인증서가 CA인지 나타내는 기본 제약, 인증서 체인 구축을 위한 인증기관/주체 키 식별자, 취소 확인을 위한 CRL 배포 지점이 있습니다. 확장은 필수(검증자가 반드시 이해해야 함) 또는 비필수(정보 제공용)로 표시됩니다.
인증서 지문은 어떻게 계산되나요?
인증서 지문(썸프린트)은 전체 DER 인코딩된 인증서 바이트의 암호화 해시입니다. 인증서 자체의 일부가 아니라 특정 인증서를 참조하기 위한 컴팩트한 식별자로 외부에서 계산됩니다. 이 도구는 브라우저의 Web Crypto API(crypto.subtle.digest())를 사용하여 SHA-256과 SHA-1 지문을 모두 계산합니다. 결과는 콜론으로 구분된 16진수 형식(예: AB:CD:EF:12:34:...)으로 표시됩니다. SHA-256 지문이 보안상 선호되며, SHA-1 지문은 이전 시스템과의 호환성을 위해 포함됩니다.
코드 예제
// Certificate Decoder - JavaScript Implementation
// Uses Web Crypto API for fingerprint computation
/**
* Extract the DER bytes from a PEM string
* @param {string} pem - PEM-encoded certificate
* @returns {ArrayBuffer} DER-encoded certificate bytes
*/
function pemToDer(pem) {
const base64 = pem
.replace(/-----BEGIN CERTIFICATE-----/g, '')
.replace(/-----END CERTIFICATE-----/g, '')
.replace(/\s/g, '');
const binary = atob(base64);
const bytes = new Uint8Array(binary.length);
for (let i = 0; i < binary.length; i++) {
bytes[i] = binary.charCodeAt(i);
}
return bytes.buffer;
}
/**
* Parse multiple certificates from a PEM chain
* @param {string} pemText - PEM text (may contain multiple certificates)
* @returns {string[]} Array of individual PEM certificate strings
*/
function extractPemBlocks(pemText) {
const regex = /-----BEGIN CERTIFICATE-----[\s\S]*?-----END CERTIFICATE-----/g;
return pemText.match(regex) || [];
}
/**
* Compute SHA-256 fingerprint of a DER-encoded certificate
* @param {ArrayBuffer} derBytes - DER-encoded certificate
* @returns {Promise<string>} Colon-separated hex fingerprint
*/
async function computeSha256Fingerprint(derBytes) {
const hashBuffer = await crypto.subtle.digest('SHA-256', derBytes);
const hashArray = Array.from(new Uint8Array(hashBuffer));
return hashArray
.map(b => b.toString(16).padStart(2, '0').toUpperCase())
.join(':');
}
// Usage with @peculiar/x509:
// import { X509Certificate } from '@peculiar/x509';
// const cert = new X509Certificate(pem);
// console.log('Subject:', cert.subject);
// console.log('Issuer:', cert.issuer);