사설 인증서(Private Certificate)는 내부 시스템이나 개발 환경에서 보안을 강화하기 위해 사용 합니다.
외부 인증 기관을 거치지 않고 자체적으로(Self-Sign) 발급하므로 비용 절감 및 주로 테스트, 사내 네트워크, 개발 환경에서 사용됩니다.
인증서 생성 방법
OpenSSL 설치
OpenSSL이 설치 되어 있지 않다면 아래 방법으로 설치 가능합니다.
sudo apt update
sudo apt install openssl
설치 스크립트
create_cert.sh 파일을 만들고 아래 내용을 입력하여 스크립트를 작성합니다.
sudo vim create_cert.sh
CA_DOMAIN과 TARGET_DOMAIN을 적절히 변경하여 생성합니다.
CA_DOMAIN은 가상의 인증서 서명 기관입니다.
TARGET_DOMAIN은 실제 사용하려는 도메인입니다.
#!/bin/bash
# 인증서 생성을 위한 변수 설정
CA_DOMAIN="icurfer.com"
TARGET_DOMAIN="icurfer.dev"
CERTS_DIR="${HOME}/certs"
# 디렉토리 생성
mkdir -p "$CERTS_DIR"
cd "$CERTS_DIR"
# 1. CA 키 생성 (4096비트)
openssl genrsa -out ca.key 4096
# 2. CA 인증서 생성 (10년 유효)
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=KR/ST=Seoul/L=Seoul/O=icurfer/OU=IT/CN=${CA_DOMAIN}" \
-key ca.key -out ca.crt
# 3. 서버 키 생성 (4096비트)
openssl genrsa -out ${TARGET_DOMAIN}.key 4096
# 4. 서버 CSR(Certificate Signing Request) 생성
openssl req -sha512 -new \
-subj "/C=KR/ST=Seoul/L=Seoul/O=icurfer/OU=IT/CN=${TARGET_DOMAIN}" \
-key ${TARGET_DOMAIN}.key -out ${TARGET_DOMAIN}.csr
# 5. x509 v3 확장 파일 생성 (와일드카드 도메인 포함)
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=${TARGET_DOMAIN}
DNS.2=*.${TARGET_DOMAIN}
EOF
# 6. 서버 인증서 생성 (10년 유효, SAN 포함)
openssl x509 -req -sha512 -days 3650 -extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in ${TARGET_DOMAIN}.csr -out ${TARGET_DOMAIN}.crt
# 7. 생성된 파일 출력
echo "CA 인증서: ${CERTS_DIR}/ca.crt"
echo "서버 키: ${CERTS_DIR}/${TARGET_DOMAIN}.key"
echo "서버 CSR: ${CERTS_DIR}/${TARGET_DOMAIN}.csr"
echo "서버 인증서: ${CERTS_DIR}/${TARGET_DOMAIN}.crt"
echo "모든 인증서가 성공적으로 생성되었습니다."
# 8. rsa변환
openssl pkey -in ${TARGET_DOMAIN}.key -out ${TARGET_DOMAIN}.rsa.key -traditional
스크립트 실행
스크립트 실행을 위하여 파일에 실행 권한을 부여합니다.
sudo chmod +x create_cert.sh
권한이 부여되면 실행할수 있습니다.
(스크립트에 Shebang설정이 되어있지않으면 직접 실행할 쉘을 지정해서 실행합니다.)
./create_cert.sh
접속 테스트
사용중인 크롬의 버전 정보입니다.
구글 크롬 브라우저를 이용하여 접속 테스트를 해보면 아래와 같은 오류메세지를 만날 수 있습니다.
ERR_CERT_AUTHORITY_INVALID메시지로 구글링하면 별에별 해결방법들이 나오는데 아래 내용으로
참고해서 진행해주시면됩니다.
신뢰할수 있는 기관에 ca.crt추가
우리는 가상의 기관으로 인증서를 만들었으므로 클라이언트에서 신뢰할수 있도록 추가 해야합니다.
크롬 브라우저 설정
우측 상단에있는 메뉴버튼 > Settings버튼을 차례로 클릭합니다.
Privacy and security > Security를 차례로 클릭합니다.
Manage certificates를 클릭합니다.
Authorities > Import를 클릭하고
인증서(ca.crt)를 선택하고 Select버튼을 클릭하여 등록합니다.
다시 접속을 시도해봅니다.
우분투 터미널 설정
우분투 터미널에서는 인증서를 서버에 인식을 시켜주어야합니다.
(이것을 몰라서 쿠버네티스 환경에서 인증서를 빼고 IP로 연결하겠다고 끙끙대는 엔지니어를 보고 나서 어이가 없어서 참…사설 인증서를 이용하는 서버에서는 신뢰할수 있는 인증서 등록을 반드시 해주시기 바랍니다.)
ca.crt를 /usr/local/share/ca-certificates경로에 복사합니다.
sudo cp ca.crt /usr/local/share/ca-certificates
적용 합니다.
root@svr:~# update-ca-certificates
# 아래내용은 적용 결과, 참고
Updating certificates in /etc/ssl/certs...
rehash: warning: skipping ca-certificates.crt,it does not contain exactly one certificate or CRL
1 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
OpenSSL을 사용해 사설 인증서를 발급하고, 이를 클라이언트에 ‘신뢰할 수 있는 인증서’로 적용하는 방법까지 살펴보았습니다. 사설 인증서는 내부 네트워크와 개발 환경에서 보안을 강화하는 데 유용하며, 신뢰 설정만 잘 해두면 테스트와 운영 모두에서 유용하게 사용할 수 있습니다.