NGINX SSL 인증서 설치/적용 가이드

사전 구성 환경

  • OpenSSL 라이브러리 http://www.openssl.org/
  • TLS / SHA-2(sha256) 암호화 지원 모듈 구성/활성 확인 필수
  • MD5, RC4 등 국제 보안 기구에서 해제를 권장하는 취약한 암호화 모듈 비활성화

진행 과정

  1. 개인키(Private Key) 생성
  2. CSR(Certificate Signing Request) 생성
  3. 인증서 발급 신청 제출
  4. 인증서 설치 적용
  5. 정상 적용 완료 테스트

개인키(Private Key) 생성

- 본 과정은, 인증서 신청서 작성시 CSR 자동생성 이용을 권장합니다. ".pfx / .jks / .key" 파일이 제공됩니다.
- 제공되는 ".pfx / .jks" 에는 "개인키+서버인증서+체인인증서+루트인증서" 가 모두 통합되어 있습니다.
openssl genrsa -des3 -out private.key 2048
  • -des3 : 개인키 암호화 수준 DES3 (Windows Apache 환경은 해당 옵션 제외)
  • -out private.key : 개인키를 저장할 파일명 지정. 개인키 파일은 분실하지 않도록 잘 보관해야 합니다.
  • 2048 : bit

Result

Loading 'screen' into random state - done
Generating RSA private key, 2048 bit long modulus
..........................+++
.....................................................
.....................+++
e is 65537 (0x10001)
Enter pass phrase for pri.kery: (개인키 파일 암호 입력)
Verifying - Enter pass phrase for pri.kery: (개인키 파일 암호 입력)

CSR(Certificate Signing Request) 생성

본 과정은, 인증서 신청시 CSR 자동생성 이용을 권장합니다
openssl req -new -key private.key -out out.csr -config "../share/openssl.cnf"
또는
openssl req -new -key private.key -out out.csr -subj "/C=KR/ST=Seoul/L=Gang-nam/O=SecureSign Inc/OU=Dev Team/CN=example.com"
  • -key private.key : 앞서 생성한 개인키 파일 지정
  • -outout.csr : 생성될 CSR 파일명 지정
  • -config "../share/openssl.cnf" : cnf 위치를 확인하지 못하는 경우 cnf 파일 경로 지정
  • -subj : CSR 생성시 입력이 필요한 정보 지정
    • C : ISO 국가 코드 KR, US, CN, JP (대문자)
    • ST : 시,도
    • L : 구,군
    • O : 기관명, 회사명
    • OU : 조직명
    • CN : 도메인명, 일반이름. IP 주소는 CN 으로 사용할수 없습니다.
    • 위 항목은 모두 영문입력을 해야 합니다. 특수문자를 사용하면 안됩니다.

Wildcard

CN : *.example.com 과 같은 패턴 이어야 합니다.

MultiDomain

CN : example.com 대표성을 가진 도메인 1개만 입력 합니다. 포함될 나머지 도메인 목록은 신청서에 별도 입력합니다.

Result

Enter pass phrase for pri.kery: (개인키 패스워드 입력)
Loading 'screen' into random state - done
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:KR (국가코드 C)
State or Province Name (full name) [Some-State]:Seoul (시,도 ST)
Locality Name (eg, city) []:Gang-nam (구,군 L)
Organization Name (eg, company) [Internet Widgits Pty Ltd]:SecureSign Inc (기관명 O)
Organizational Unit Name (eg, section) []:Dev Team (조직명 OU)
Common Name (eg, YOUR name) []:example.com (도메인명 CN)
Email Address []:webmaster@example.com (이메일)

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: enter
An optional company name []: enter

인증서 신청 CSR

본 과정은, 인증서 신청시 CSR 자동생성 이용을 권장합니다
-----BEGIN CERTIFICATE REQUEST-----
MIIC5TCCAc0CAQAwgZ8xCzAJBgNVBAYTAktSMQ4wDAYDVQQIEwVTZW91bDERMA8G
A1UEBxMIR2FuZy1uYW0xGDAWBgNVBAoTD1NlY3VyZUxheWVyIEluYzERMA8GA1UE
-- 중략 --
wxd+87gwsvAC2dyK8I4N1ttXDRJcDPCDe1BGqWvYYAZN7FbvnbHCM7y/SN++pxbS
jbnkoe8uStQvfCo6DW5MZHUli5+lRU/UpA==
-----END CERTIFICATE REQUEST-----

앞서 생성한 CSR 파일은 Base64 포맷의 PEM Text 이며, 텍스트 편집기를 이용하여 파일을 오픈합니다. -----BEGIN ~ REQUEST----- 까지 포함하여 내용 전체를 복사하여 신청서에 입력합니다. (----- 를 누락하거나, 새로운 빈출이 추가되지 않도록 주의하세요)

인증서 파일 통합

1. cat domain_xxxxx.crt.pem > unified.myssl.pem
2. cat ca-bundle.pem >> unified.myssl.pem

* 위 예제는, 서버인증서 + 체인인증서 + 루트인증서를 unified.myssl.pem 1개 파일로 통합하는 과정입니다.
* 루트/체인 인증서는 상품별로 차이가 있으므로, 발급 완료시 첨부된 파일 내역에서 확인 가능합니다.
* 서버 인증서 부터 체인 인증서, 그리고 루트 인증서 순서대로 설치 합니다.

nginx.conf 적용 예제

server {
listen 443;
ssl on;
server_name www.securesign.kr;

ssl on;
ssl_certificate /파일경로/unified.myssl.pem;
ssl_certificate_key /파일경로/domain_xxxxx.key.pem (private.key);

location /
root path
}
}

* unified.myssl.pem 는 서버인증서+체인인증서+루트인증서를 1개 파일로 통합한 PEM 파일입니다.
* 예제에 포함되어 있지 않은 Property 는 공식 매뉴얼 또는 서버별 속성값을 사용합니다.
* domain_xxxxx.key.pem 개인키는 CSR 자동생성 신청시 발급 완료후 첨부파일에 첨부해 드립니다.

주요 이슈 사항