KJH
사설 인증서 발급 본문
서버와 클라이언트 간 통신을 할 때 생기는 패킷 및 데이터를 안전하게 전달 하기 위해 인증서를 사용하고
서버가 신뢰할 수 있는 진짜 서버 임을 확인을 하는 용도로 사용하기도 한다.
공인 된 인증서를 발급하는 CA 기관 리스트는 OS(mac - keychain)나 브라우저(source Code)에 있고 공개키도 함께 가지고 있기에 인증을 할 수 있습니다.
인증서에 담기는 정보들
- CA(인증 기관) 정보, 지문, 디지털 서명
- 암호화 알고리즘
- 서버 공개키, 서명
- 보호할 도메인 ex) *.naver.com
openssl로 사설 인증서를 만들어 보기
- private key, csr, openssl config파일 생성
- CA 처럼 노출 돼서는 안되는 private Key를 자체적으로 생성 후 CSR 생성을 합니다
- CSR은 공인 인증서를 만들때도 CA에 제출 해야하는데 사설을 만들때도 똑같이 인증서를 사용하는 주체의 정보를 담습니다.
- C=KR는 국가 코드
- ST=SEOUL는 주나 도
- L=GANGNAM는 지역명
- O=HOME.는 조직명
- OU=Web Dev는 조직 내 부서명
- CN=${DOMAIN}
- SAN 정보를 넣어 하나의 인증서에 여러 도메인을 넣을 수 있습니다.
#!/bin/bash
DOMAIN=test.com
PASSPHRASE={password} # PW 입력
# private Key 생성
openssl genrsa -des3 -out ${DOMAIN}.key -passout pass:${PASSPHRASE} 2048
# CSR 생성
openssl req -new -key ${DOMAIN}.key -out ${DOMAIN}.csr -passin pass:${PASSPHRASE} -subj "/C=KR/ST=SEOUL/L=GANGNAM/O=HOME./OU=Web Dev/CN=${DOMAIN}"
# SAN 정보가 포함된 openssl.cnf 파일 생성
cat > openssl.cnf <<-EOF
[req]
default_bits = 2048
default_keyfile = ${DOMAIN}.key
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no
[req_distinguished_name]
C = KR
ST = SEOUL
L = GANGNAM
O = HOME.
OU = Web Dev
CN = ${DOMAIN}
[v3_req]
keyUsage = keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = *.${DOMAIN}
DNS.2 = *.api.${DOMAIN}
EOF
# SAN 정보가 포함된 새로운 인증서 요청을 생성
openssl req -new -out ${DOMAIN}_with_SAN.csr -key ${DOMAIN}.key -passin pass:${PASSPHRASE} -config openssl.cnf
# 자체 서명된 인증서 생성
openssl x509 -req -days 365 -in ${DOMAIN}_with_SAN.csr -signkey ${DOMAIN}.key -out ${DOMAIN}.crt -extensions v3_req -extfile openssl.cnf -passin pass:${PASSPHRASE}
- private Key 복호화
openssl rsa -in test.com.key -out private-no.key
- pfx 인증서 생성
openssl pkcs12 -export -out test.com.pfx -inkey private-no.key -in test.com.crt
- secert yaml 생성
certificate_base64=$(openssl base64 -A -in test.crt)
private_key_base64=$(openssl base64 -A -in private-no.key)
cat <<EOF > ingress-tls.yaml
apiVersion: v1
kind: Secret
metadata:
name: ingress-tls
type: kubernetes.io/tls
data:
tls.crt: ${certificate_base64}
tls.key: ${private_key_base64}
EOF
※ chain 인증서 생성 (사설 인증서 x)
- CA를 통해 인증서를 만들었다면 받은 domain.crt와 CA.crt를 합치면 Chain 인증서를 생성할 수 있습니다.
- 이점은 OS나 brower에 인증서 관련 정보가 없을 수도 있으니 미리 넣어줘서 경고 메세지를 원천 차단할 수 있습니다. (구버전에는 정보들이 없는 경우도 있다고 합니다)
cat star_test_com.crt DigiCertCA.crt > star_test_com_chain.crt
'DevOps' 카테고리의 다른 글
Thanos (0) | 2024.04.13 |
---|---|
Prometheus Loki (0) | 2023.12.26 |
Terraform (Azure) (0) | 2023.11.01 |
ansible (0) | 2023.10.20 |
Prometheus (Windows exporter) (0) | 2023.10.20 |