CSR(인증서 서명 요청)은 SSL 인증서를 신청하기 위해 인증 기관(CA)에 보내는 인코딩된 데이터 블록입니다. 공개키와 도메인 정보가 포함되어 있습니다. CA는 이를 사용하여 인증서를 생성합니다.
CSR에 포함된 내용
| 필드 | 예시 | 필수 여부 |
|---|---|---|
| Common Name (CN) | example.com | 예 |
| 공개키 | RSA 또는 ECDSA 공개키 | 예 |
| 키 알고리즘 | ECDSA P-256 또는 RSA 2048 | 예 |
| 조직 | Your Company LLC | DV에서는 선택 |
| 국가 | US | DV에서는 선택 |
| SAN | www.example.com, api.example.com | 멀티 도메인용 |
DV 인증서(Let’s Encrypt 같은)에서는 도메인 이름과 공개키만 중요합니다. 조직 관련 필드는 무시됩니다.
CSR 생성 과정
- 키 쌍 생성 — 개인키와 공개키
- CSR 구축 — 공개키 + 도메인 정보를 표준화된 형식(PKCS#10)으로 인코딩
- CSR 서명 — 개인키로 서명 (일치하는 개인키를 보유하고 있음을 증명)
- CA에 전송 — CA가 도메인 소유권을 검증한 후 CSR을 사용하여 인증서 생성
개인키는 시스템을 떠나지 않습니다. CSR에는 공개키만 포함됩니다.
GetHTTPS가 CSR을 자동 처리
기존 도구에서는 OpenSSL로 CSR을 수동 생성해야 합니다:
# 수동 방식 (GetHTTPS에서는 불필요)
openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:P-256 \
-keyout privkey.pem -out csr.pem -nodes \
-subj "/CN=example.com"
GetHTTPS에서는 CSR을 보거나 만질 필요가 없습니다. 도구가:
- 브라우저에서 키 쌍을 생성 (Web Crypto API)
- 도메인 입력으로부터 CSR을 자동 구축
- ACME 흐름의 일부로 Let’s Encrypt에 전송
- 서명된 인증서를 다운로드할 수 있도록 제공
CSR은 내부 단계입니다 — 도메인만 입력하면 인증서를 받습니다.
CSR 수동 생성 (필요한 경우)
독립적인 CSR이 필요한 경우(상용 CA용이거나, 업로드를 요구하는 플랫폼용):
ECDSA P-256 (권장)
openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:P-256 \
-keyout privkey.pem -out csr.pem -nodes \
-subj "/CN=example.com"
RSA 2048
openssl req -new -newkey rsa:2048 \
-keyout privkey.pem -out csr.pem -nodes \
-subj "/CN=example.com"
여러 도메인 포함 (SAN)
openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:P-256 \
-keyout privkey.pem -out csr.pem -nodes \
-subj "/CN=example.com" \
-addext "subjectAltName=DNS:example.com,DNS:www.example.com"
CSR 확인
openssl req -in csr.pem -noout -text
CSR에 포함된 도메인 이름, 키 알고리즘, 키 크기를 보여줍니다.
ACME 프로토콜에서의 CSR
ACME 프로토콜(Let’s Encrypt가 사용)에서 CSR은 도메인 검증이 통과한 후 완료 단계에서 전송됩니다. CA는 CSR의 공개키를 사용하여 인증서를 구축합니다. CSR 형식은 PKCS#10이며, ACME JSON 메시지에서 base64url로 인코딩됩니다.
GetHTTPS에서는 이 전체 과정이 Web Crypto API와 pkijs 라이브러리를 사용한 JavaScript로 이루어집니다. 원시 CSR 바이트를 볼 일이 없습니다.
자주 묻는 질문
CSR 파일을 보관해야 하나요?
아닙니다. CSR은 인증서 요청 중에만 사용됩니다. CA가 인증서를 발급한 후에는 CSR이 역할을 다합니다. 개인키와 인증서를 보관하세요 — CSR은 버려도 됩니다.
갱신 시 CSR을 재사용할 수 있나요?
기술적으로 가능하지만, 갱신마다 새 키 쌍과 CSR을 생성하는 것이 더 좋습니다. 이는 키 순환 원칙을 따르며 키가 유출되었을 때의 노출을 제한합니다.
CSR과 인증서의 차이점은?
CSR은 요청입니다 — 공개키를 포함하고 CA에 서명을 요청합니다. 인증서는 결과입니다 — 공개키가 도메인에 속한다는 CA의 서명된 선언입니다. CSR은 입력이고, 인증서는 출력입니다.
와일드카드 도메인에 대한 CSR을 생성할 수 있나요?
네. Common Name으로 *.example.com을 사용합니다:
openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:P-256 \
-keyout privkey.pem -out csr.pem -nodes \
-subj "/CN=*.example.com"
GetHTTPS에서는 CSR을 수동으로 생성할 필요 없이 도메인으로 *.example.com을 입력하면 GetHTTPS가 CSR을 자동으로 처리합니다.
CSR의 “key usage”는 무엇인가요?
키 사용 확장은 인증서의 용도를 지정합니다 — 일반적으로 TLS 인증서에는 “Digital Signature”와 “Key Encipherment”입니다. GetHTTPS와 대부분의 ACME 클라이언트는 이를 기본적으로 올바르게 설정합니다. 특정 요구 사항이 있는 상용 CA를 위해 수동으로 CSR을 생성하는 경우에만 키 사용에 대해 고민하면 됩니다.