Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

KJH

사설 인증서 발급 본문

DevOps

사설 인증서 발급

모이스쳐라이징 2023. 11. 4. 03:18

서버와 클라이언트 간 통신을 할 때 생기는 패킷 및 데이터를 안전하게 전달 하기 위해 인증서를 사용하고

서버가 신뢰할 수 있는 진짜 서버 임을 확인을 하는 용도로 사용하기도 한다.

 

공인 된 인증서를 발급하는 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