인증서를 디코딩하는 방법
-----BEGIN CERTIFICATE-----와-----END CERTIFICATE-----줄까지 포함해 인증서를 상자에 붙여넣으세요. 이 줄이 없는 원시 Base64 DER와30 82로 시작하는 hex 덤프도 받습니다.- 또는
.pem,.crt,.cer,.der,.p7b,.crl파일을 상자에 놓으세요. 바이너리 DER 파일도 되므로 먼저 변환할 필요가 없습니다. - 카드를 읽으세요. 입력 속 객체마다 카드가 하나씩 생기므로, 인증서가 세 개 든
fullchain.pem이면 카드 세 개가 나옵니다. - 원시 트리가 필요하면 카드 아래의 ASN.1 구조를 여세요. 예를 들어 요약에서 기타 확장으로 묶인 확장을 찾을 때 씁니다.
레이아웃만 보고 싶다면 예시 버튼으로 데모 인증서를 불러오세요.
디코더가 보여 주는 것
| 필드 | 확인할 점 |
|---|---|
| 주체, 발급자 | 인증서가 누구를 위한 것이고 누가 서명했는지. 두 값이 같으면 자체 서명 표시가 붙습니다. |
| 유효 시작 / 유효 기간 만료 | 남은 일수와 함께, 만료되었거나 아직 유효하지 않거나 만료까지 30일 미만이면 경고합니다. |
| 주체 대체 이름 (SAN) | 인증서가 유효한 호스트 이름과 IP. 브라우저는 호스트 이름을 이 목록과 대조하며 CN은 무시합니다. |
| 공개 키, 서명 알고리즘 | 예를 들어 EC P-256과 ecdsa-with-SHA256, 또는 비트 크기가 표시된 RSA. |
| 키 사용, 확장 키 사용 | TLS 서버 인증서는 EKU에 serverAuth가 있어야 합니다. |
| 기본 제약 조건 | CA:TRUE는 중간 인증서나 루트 인증서를 뜻합니다. |
| 주체 키 ID, 기관 키 ID | 인증서의 AKI는 그 인증서를 발급한 인증서의 SKI와 같으며, 이것으로 체인의 순서를 맞춥니다. |
| CRL 배포 지점, OCSP, CA 발급자 | 일반 텍스트로 표시됩니다. 페이지가 이 주소에 접속하지는 않습니다. |
| SHA-1 및 SHA-256 지문 | DER 전체의 해시로, 인증서 관리 도구와 피닝 설정이 비교하는 값입니다. |
| SPKI SHA-256 핀 | 공개 키만의 SHA-256을 Base64로 나타낸 값입니다. 같은 키로 인증서를 갱신하면 그대로 유지됩니다. |
체인, 번들, 섞인 파일
서버는 보통 체인을 보냅니다. 먼저 리프 인증서가 오고, 그 뒤에 중간 인증서가 하나 이상 옵니다. fullchain.pem 전체를 붙여넣고 카드를 차례로 보세요. 카드 1의 발급자는 카드 2의 주체여야 하고, AKI/SKI 값도 같은 방식으로 이어져야 합니다. 중간 인증서를 스스로 받아 오지 않는 클라이언트에서 나는 “unable to get local issuer certificate” 오류는 대개 순서가 틀렸거나 중간 인증서가 빠졌기 때문입니다.
PKCS#7 번들(-----BEGIN PKCS7-----, Windows나 CA 포털에서 받는 .p7b인 경우가 많음)도 열리며, 안에 든 인증서마다 카드가 생깁니다. 한 번에 여러 유형의 객체를 섞어 붙여넣을 수도 있습니다. 인증서, 그 CSR, 그 개인 키를 함께 넣고 세 개의 SPKI SHA-256 핀 줄이 같다면 키, 요청, 인증서가 모두 같은 키 쌍에 속합니다.
첫 문자로 인증서 데이터 알아보기
헤더 줄이 없으면 인증서는 DER의 Base64일 뿐이며, DER는 항상 SEQUENCE 바이트 0x30으로 시작합니다. 그래서 알아 둘 만한 접두사가 몇 가지 있습니다.
| 시작 부분 | 대개 |
|---|---|
MIIB | 작은 EC 인증서 같은 260–515바이트의 DER(아래 예시는 443바이트) |
MIIC | 516–771바이트의 DER |
MIID, MIIE, MIIF | 772–1,539바이트의 DER로, RSA-2048 인증서의 일반적인 크기 |
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE | EC P-256 공개 키(SPKI) |
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A | RSA-2048 공개 키(SPKI) |
네 번째 문자는 길이 바이트를 따르므로 크기에 따라 바뀝니다. 더 많은 패턴은 자주 보는 Base64 접두사에 모아 두었습니다.
OpenSSL로 인증서 디코딩하기
명령줄에서 같은 필드를 보는 방법입니다.
openssl x509 -in cert.pem -noout -text
openssl x509 -in cert.pem -noout -subject -issuer -dates -ext subjectAltName
openssl x509 -in cert.pem -noout -fingerprint -sha256
openssl x509 -in cert.pem -noout -pubkey | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | openssl base64
마지막 줄은 SPKI 핀을 출력하며, 여기 표시되는 핀과 같습니다. 실제 서버가 보내는 체인을 받으려면 openssl s_client -connect example.com:443 -servername example.com -showcerts </dev/null을 실행하고 출력을 붙여넣으세요. 디코더가 주변 텍스트에서 PEM 블록을 골라냅니다. 더 많은 한 줄 명령은 OpenSSL Base64 페이지에 있습니다.
자주 생기는 문제
- "—–BEGIN 줄은 있지만 레이블이 같은 —–END 줄이 없습니다.": 복사하다 잘렸습니다. 다시 복사하거나 파일을 놓으세요.
- “PEM도 아니고 올바른 Base64 DER도 아닙니다”: 입력이 둘 다 아닙니다. 바이너리 파일을 텍스트 편집기로 열어 붙여넣었거나, 채팅이나 이메일 클라이언트를 거치면서 Base64의 문자가 사라진 경우가 대표적입니다.
- “PEM이 아니라 SSH 공개 키입니다.”:
ssh-ed25519 AAAA…줄은 SSH 키 지문 도구에서 다룹니다.-----BEGIN OPENSSH PRIVATE KEY-----도 마찬가지입니다. - 지문에 “보안(https) 페이지가 필요합니다"라고 표시됨: 해시는 https나 localhost에서만 작동하는 브라우저의 WebCrypto API를 씁니다. 페이지를 https로 여세요.
.pfx나.p12파일: PKCS#12 내용은 내보내기 비밀번호로 암호화되어 있어 바깥 구조만 보여 줄 수 있습니다. 먼저openssl pkcs12 -in file.pfx -nokeys -out cert.pem으로 인증서를 추출하세요.
자주 묻는 질문
SSL 인증서가 언제 만료되는지 어떻게 확인하나요?
위에 붙여넣고 유효 기간 만료를 보세요. 디코더가 남은 일수를 덧붙이고, 30일 미만이 남았거나 날짜가 지났으면 경고합니다. 셸에서는 openssl x509 -in cert.pem -noout -enddate가 같은 날짜를 출력합니다.
.pem, .crt, .cer 파일은 어떻게 다른가요?
확장자는 관례일 뿐입니다. .pem 파일은 항상 -----BEGIN 줄이 있는 Base64 텍스트이고, .crt와 .cer는 그런 텍스트일 수도, 바이너리 DER일 수도 있습니다. 파일을 여기에 놓으면 디코더가 둘 다 읽습니다.
이 도구가 인증서 체인이나 폐기 여부를 검증하나요?
아니요. 모든 필드를 읽지만 페이지가 다른 서버에 연결할 수 없으므로 서명, 체인, OCSP/CRL 상태는 확인하지 않습니다. 체인 검사에는 openssl verify -CAfile chain.pem cert.pem을 사용하세요.
인증서 옆에 개인 키를 붙여넣어도 되나요?
됩니다. 둘이 짝인지 확인하는 가장 빠른 방법이기도 합니다. SPKI SHA-256 핀 값이 같으면 같은 키 쌍입니다. 개인 키는 유형과 크기만 표시하며, ASN.1 트리의 비밀 값은 숨겨집니다.