OpenSSL

Security

SSL/TLS 인증서 생성 및 관리 도구 → 인증과 전자서명 참조

Demo CA 설정

# 1. demoCA 디렉토리 생성
mkdir demoCA
echo "00" > demoCA/serial
touch demoCA/index.txt

CA 인증서 생성

# CA 개인키 생성
openssl genrsa -des3 -out ca.key 1024

# Self-Signed CA 인증서 생성
openssl req -new -x509 -days 365 -key ca.key -out ca.crt

서버 인증서 생성

# 개인키 생성
openssl genrsa -des3 -out server.key 1024

# CSR(인증서 서명 요청) 생성
openssl req -new -days 365 -key server.key -out server.csr

# CA로 서버 인증서 서명
openssl ca -in server.csr -out server.crt -keyfile ca.key -cert ca.crt -outdir .

TLS 상호 인증 (mTLS)

인증에 사용되는 파일 6개:

type private key public key
인증기관 ca_key.pem ca.crt
서버 server_key.pem server.crt
클라이언트 client_key.pem client.crt

CA 인증서 생성

openssl genrsa -des3 -out ca.key 1024
openssl req -new -key ca.key -out ca.csr
openssl x509 -req -days 1280 -in ca.csr -signkey ca.key -out ca.crt
# 개인키에서 패스워드 제거
openssl rsa -in ca.key -out ca_key.pem

서버 인증서 생성

openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out server.csr
openssl x509 -req -in server.csr -out server.crt \
    -signkey server.key -CA ca.crt -CAkey ca.key \
    -CAcreateserial -days 365
openssl rsa -in server.key -out server_key.pem

클라이언트 인증서 생성

openssl genrsa -des3 -out client.key 1024
openssl req -new -key client.key -out client.csr
openssl x509 -req -in client.csr -out client.crt \
    -signkey client.key -CA server.crt -CAkey server.key \
    -CAcreateserial -days 365
openssl rsa -in client.key -out client_key.pem

포맷 변환

# crt → der (바이너리 포맷)
openssl x509 -in ca.crt -out ca.der -outform DER

# pem → der
openssl x509 -in demoCA/cacert.pem -outform DER -out cacert.der

# der → pem
openssl x509 -in cert.cer -inform DER -out cert.pem -outform PEM

인증서 확인

# 인증서 내용 보기
openssl x509 -noout -text -in client.crt

# 비밀키 보기
openssl rsa -noout -text -in server.key

# openssl 설치 확인
httpd -t

PFX 변환

# crt + key → pfx
openssl pkcs12 -export -in client.crt -inkey client.key \
    -certfile ca.crt -out bundle.p12

# pfx에서 키 추출
openssl pkcs12 -in filename.pfx -nocerts -out key.pem

# pfx에서 인증서 추출
openssl pkcs12 -in filename.pfx -clcerts -nokeys -out cert.pem

관련 노트

참고