Cert Management/PKI, OpenSSL

공개키 기반 구조, PKI (Public Key Infrastructure) #1

블로그 닉네임 입력 제한 수는 몇 자인가요? 2025. 5. 22. 17:43

1. PKI란?

PKI(공개 키 기반 구조)는 공개 키 암호화 기술을 기반으로
디지털 인증서를 생성, 관리, 배포, 폐지하는 인프라
입니다.

이는 인터넷 상에서 신뢰할 수 있는 보안 통신과 사용자의 신원 인증을 가능하게 합니다.

개인키(Private Key): 사용자가 가진 비밀 키
공개키(Public Key): 공개적으로 배포되는 키
두개의 키는 알고리즘으로 연결되어 있으며,
한쪽으로 암호화한 데이터는 다른 쪽으로만 복호화할 수 있습니다.

두개의 키는 키 쌍(Key Pair)으로 표현합니다.
그리고 개인키-공개키 구조는 2개의 키를 사용하기 때문에
비대칭키 암호화( (Asymmetric Key Encryption)입니다.
대칭키 암호화에 대해서는 추후 작성해보겠습니다.



2. 비대칭키 암호화

공개키로 암호화 → 개인키로 복호화 (또는 그 반대)
키 쌍을 사용해 안전하게 통신 시작 가능

계산량이 크고 속도가 느림

구분 설명
공개키와 개인키 쌍을 사용
예시 알고리즘 RSA, ECDSA, ElGamal 등
장점 키 분배가 안전, 신원 인증 가능
단점 연산 복잡도 높아 대용량에는 부적합

 

 

3. PKI의 목적

신원 인증: 사용자의 신원을 인증서 기반으로 확인
데이터 무결성: 데이터가 위변조되지 않았음을 증명
부인방지: 서명자가 추후 서명을 부인하지 못하도록 방지
암호화: 비밀 데이터의 안전한 전송

 

4. PKI 구성 요소

구분 설명
CA (인증기관) 인증서를 발급하고 서명하여 신뢰성을 보장하는 핵심 기관
RA (등록기관) 인증 요청을 검증하고 CA에 전달하는 역할을 수행 (CA와 분리 가능)
사용자(End Entity) 인증서를 사용하는 주체 (사람, 서버, 디바이스 등)
공개키/개인키 암호화와 서명에 사용되는 쌍의 키
디지털 인증서 공개키, 소유자 정보, 서명 등이 포함된 신뢰 문서
CRL (인증서 폐지 목록) 더 이상 유효하지 않은 인증서 목록
OCSP (Online Certificate Status Protocol) 인증서 상태를 실시간으로 확인하는 프로토콜

 

5. PKI 플로우

[1] 사용자 (End Entity, 예: 서버 관리자)
   └─ 개인키 생성 (Private Key)
         └─ 반드시 본인의 시스템/장비에서 생성됨
         └─ 절대 외부에 유출되면 안 됨
   └─ CSR(Certificate Signing Request) 생성
         └─ 공개키 + 사용자 정보 (CN, 조직명, 도메인 등) 포함
         └─ 생성 시 개인키로 자체 서명함
         └─ 확장자: .csr

        ↓

[2] 등록기관 (RA, Registration Authority)
   └─ 사용자 정보 확인 (실명, 조직, 도메인 소유권 등)
         └─ 인증 등급에 따라 검증 강도 달라짐
            예: DV(도메인 검증) vs OV(조직 검증) vs EV(확장 검증)
   └─ 검증된 CSR을 인증기관(CA)에 전달

        ↓

[3] 인증기관 (CA, Certificate Authority)
   └─ CSR 내용 검토 및 디지털 인증서 생성
         └─ 인증서 = 사용자 정보 + 공개키 + CA 서명
         └─ 확장자: .crt, .cer, .pem 등
   └─ CA의 개인키로 인증서에 전자서명
         └─ 이 서명이 "이 인증서는 신뢰할 수 있다"는 근거

        ↓

[4] 사용자 (수신자)
   └─ 인증서 수신 후 설치
         └─ 웹서버(예: Apache, Nginx)에 설치
         └─ 개인키는 여전히 사용자 장비에만 존재
   └─ 인증서 체인 구성
         └─ 중간 CA, 루트 CA 포함한 full chain 제공

        ↓

[5] 제3자 (클라이언트, 브라우저, 사용자)
   └─ 접속 시 인증서 검증 수행
         └─ 체인을 따라 루트 CA까지 신뢰 검증
         └─ 인증서 유효성 확인:
            - CRL (Certificate Revocation List)
            - OCSP (Online Certificate Status Protocol)
   └─ 유효하면 보안 연결(SSL/TLS) 수립

 

각 단계에서 다루는 파일
OpenSSL로 직접 생성해볼 수 있습니다.

파일명 용도 관련 단계
.key 개인키 파일  개인키 생성
.csr 인증서 서명 요청 파일  CSR 생성
.crt / .cer 최종 인증서 파일  인증서 발급 및 서명
.pem 인증서나 키를 담은 텍스트 기반 파일 포맷 인증서 수신 및 설치
fullchain.pem 인증서 체인 포함 파일 인증서 체인 구성


직접 생성은 저번 포스팅을 참고하시면 됩니다.

 

OpenSSL CSR 발급 및 x.509 인증서 발급

OpenSSL 설치 및 인증서 발급OpenSSL이란OpenSSL은 데이터를 암호화하거나 보안을 적용할 때 사용하는 오픈소스 툴킷보통 인터넷에서 HTTPS 같은 보안 통신, 전자서명, 인증서 발급, 암호화된 파일 생성

happyqa.tistory.com

 

6. 공개키와 개인키 위치

개인키
외부에 노출되지 않아야함

시나리오 위치
사용자가 직접 생성 로컬 PC의 키 저장소 (예: Windows Key Store, macOS Keychain, .pfx, .pem 등)
웹서버 인증서 서버 내부의 파일 또는 HSM(하드웨어 보안 모듈)
개발자 서명 개발툴이나 키스토어(JKS, PKCS#12 등)에 저장
보안 장비 HSM, 스마트카드, USB 토큰 등 외부 저장 장치
모바일 앱 OS 보안 영역 (Android Keystore, Apple Secure Enclave 등)

공개키
누구나 접근 가능하며 디지털 인증서 형태(x.509)로 공개

시나리오 위치
HTTPS 웹서버 브라우저 접속 시 서버에서 자동 다운로드 (SSL 인증서 포함)
이메일 서명 공개된 인증서 저장소 또는 이메일 첨부
코드 서명 소프트웨어와 함께 배포됨 (서명 정보 포함)
운영 체제 루트 인증서 저장소 (예: Windows, Linux 시스템의 CA 목록)
직접 배포 .cer, .crt, .pem 파일로 공개 공유 가능

공개키와 개인키의 대표적인 사용 방식은 2가지가 있습니다.


클라이언트가 HTTPS로 접속하면

서버는 공개키가 포함된 인증서(.crt)를 전송

서버의 개인키는 서버 내부에만 저장되어, 클라이언트는 알 수 없음

 

사용자가 디지털 서명을 할 때

사용자 로컬 시스템에서 개인키로 서명

수신자는 공개 인증서로 서명을 검증

 

공개키와 개인키는 각 역할 주체(클라이언트, 서버, 인증기관) 별 보관 위치가 존재합니다.
그 중 개인키 보관, 인증서 발급 및 전체 체계를 관리하는 것이 인증기관(CA)입니다.


그러면 다음에는 인증기관(CA)에 대해 더 자세히 설명해보도록 하겠습니다.