자체 서명 인증서는 직접 만든 것으로, 자신이 자신의 인증 기관 역할을 합니다. CA 서명 인증서는 브라우저가 이미 신뢰하는 인증 기관(Let’s Encrypt나 DigiCert 같은)이 발급하고 서명한 것입니다.
실질적인 차이: 자체 서명 인증서는 브라우저 보안 경고를 유발합니다. CA 서명 인증서는 그렇지 않습니다.
비교
| 자체 서명 | CA 서명 | |
|---|---|---|
| 생성자 | 사용자 (openssl 명령) | 신뢰할 수 있는 CA |
| 브라우저 신뢰 | ❌ 경고: “신뢰할 수 없음” | ✅ 자물쇠 아이콘 |
| 암호화 강도 | 동일 | 동일 |
| 비용 | 무료 | 무료 (Let’s Encrypt) 또는 유료 |
| 검증 | 없음 — 자기 자신이 보증 | CA가 도메인/조직 검증 |
| 사용 사례 | 개발, 내부, 테스트 | 프로덕션 웹사이트 |
| 갱신 | 수동 (유효 기간 직접 설정) | 90일 (LE) 또는 1년 (유료) |
| 중간자 공격 보호 | ⚠️ 약함 — 사용자가 경고 무시에 익숙해짐 | ✅ 강함 — 실제 문제에만 경고 |
자체 서명 인증서에 경고가 표시되는 이유
브라우저는 누가 서명했는지를 기준으로 인증서를 신뢰합니다. OS와 브라우저에는 약 100-150개의 신뢰할 수 있는 루트 인증 기관 목록이 포함되어 있습니다. 서버가 이 CA 중 하나가 서명한 인증서를 제공하면 브라우저가 자물쇠를 표시합니다.
자체 서명 인증서는 어떤 신뢰할 수 있는 CA도 서명하지 않았습니다 — 자체 개인키로 서명한 것입니다. 브라우저는 인증서가 합법적인지 확인할 방법이 없으므로 경고를 표시합니다. 이것이 올바른 동작입니다 — CA 검증 없이는 누구나 google.com을 주장하는 인증서를 만들 수 있습니다.
자체 서명 인증서를 사용해야 하는 경우
내부 서비스
인터넷에 노출되지 않는 서비스 — 내부 대시보드, 모니터링 도구, 데이터베이스 관리 패널. 팀에서 자체 서명 CA를 신뢰 저장소에 추가할 수 있습니다.
개발 및 테스트
mkcert를 설정하지 않고 빠른 로컬 개발 HTTPS. 브라우저 경고가 번거롭지만 테스트에는 기능적입니다.
IoT 및 임베디드 기기
알려진 서버와 통신하며 인증서를 고정할 수 있는 기기 — 브라우저 신뢰 저장소가 관여하지 않습니다.
에어갭 네트워크
인터넷 접근이 없어 Let’s Encrypt의 ACME 프로토콜을 사용할 수 없는 네트워크. 자체 서명이 유일한 옵션입니다.
자체 서명 인증서를 사용하면 안 되는 경우
공개 웹사이트
사용자가 무서운 경고를 보고 떠납니다. 검색 엔진이 신뢰할 수 없는 인증서가 있는 HTTPS 페이지를 크롤링하지 않을 수 있습니다. Let’s Encrypt 인증서가 무료인데 자체 서명을 사용할 이유가 없습니다.
사용자 데이터를 처리하는 사이트
자체 서명 인증서는 사용자에게 보안 경고를 클릭하여 무시하는 습관을 들이게 합니다 — 좋은 보안의 반대입니다. 실제 공격이 경고를 유발할 때, “어차피 진행”을 클릭하는 것에 익숙해진 사용자는 알아채지 못합니다.
자체 서명 인증서 생성 방법
# ECDSA (권장)
openssl req -x509 -newkey ec -pkeyopt ec_paramgen_curve:P-256 \
-keyout key.pem -out cert.pem -days 365 -nodes \
-subj "/CN=internal.example.com" \
-addext "subjectAltName=DNS:internal.example.com,IP:10.0.0.5"
# RSA
openssl req -x509 -newkey rsa:2048 \
-keyout key.pem -out cert.pem -days 365 -nodes \
-subj "/CN=internal.example.com"
결과 cert.pem과 key.pem을 서버 설정에 사용합니다. 참고: fullchain.pem과 chain.pem은 필요하지 않습니다 — 자체 서명 인증서에는 체인이 없습니다.
모든 시나리오에 대한 더 나은 대안
| 시나리오 | 자체 서명 대신 사용할 것 |
|---|---|
| 프로덕션 웹사이트 | GetHTTPS를 통한 Let’s Encrypt — 무료, 신뢰됨, 5분 |
| 로컬 개발 | mkcert — 로컬에서 신뢰됨, 경고 없음 |
| 내부 서비스 | Let’s Encrypt (인터넷 접근 가능한 경우) 또는 사설 CA |
| 테스트/스테이징 | Let’s Encrypt 스테이징 환경 — 무제한 테스트 인증서 |
SSL 인증서가 연간 $100 이상 비용이 들 때는 자체 서명 인증서가 합리적이었습니다. 이제 Let’s Encrypt가 무료이므로, 진정으로 격리된 환경을 제외하면 자체 서명할 이유가 거의 없습니다.
자주 묻는 질문
자체 서명 인증서가 CA 서명보다 덜 안전한가요?
암호화는 동일합니다 — 같은 알고리즘, 같은 키 강도. 차이점은 신뢰입니다: CA 서명 인증서는 신뢰할 수 있는 제3자를 통해 서버의 신원을 증명합니다. 자체 서명 인증서는 아무것도 증명하지 않습니다 — 누구나 어떤 도메인에 대해서도 만들 수 있습니다. 보안 문제는 암호화가 아니라 인증의 부재입니다.
브라우저가 자체 서명 인증서를 신뢰하게 만들 수 있나요?
네, 관리하는 컴퓨터에서는 가능합니다. 인증서(또는 이를 서명한 자체 서명 CA)를 OS/브라우저 신뢰 저장소에 가져옵니다. 이것이 mkcert가 자동화하는 것입니다. 하지만 다른 사람의 브라우저에서 신뢰하게 만들 수는 없습니다 — 그것은 실제 CA가 필요합니다.
호스팅 제공자가 자체 서명 인증서를 줬습니다. 괜찮은 건가요?
공개 웹사이트에는 아닙니다. 제공자에게 무료 Let’s Encrypt를 활성화해달라고 요청하세요(대부분의 호스트가 지원). 그렇지 않으면 GetHTTPS를 사용하여 직접 신뢰할 수 있는 인증서를 받으세요.
자체 CA를 만들면 안 되나요?
만들 수 있지만, 브라우저 신뢰 저장소에 추가하는 수년 걸리고 비용이 많이 드는 과정을 거치지 않으면 브라우저가 신뢰하지 않습니다. 사설 CA는 내부 인프라에서 작동합니다(팀이 루트 인증서를 설치). 공개 웹사이트에는 Let’s Encrypt 같은 신뢰할 수 있는 CA를 사용하세요.