HTTPS 용 사설 인증서 만들기

HTTPS 접속을 지원하기 위한 사설 인증서 만들기 과정을 정리한다.

사설 인증서

내부망에서만 사용되는 HTTP 서버는 직접 만든 사설 인증서를 사용하여 무료로 HTTPS 접속을 구축할 수 있다. (여기서 사설 인증서라 함은 self sign 된 인증서를 말함)
아래에 OpenSSL 툴을 이용하여 사설 인증서를 생성하고, 아파치 웹서버를 세팅하는 방법을 기술한다.

개인키 생성

우선 아래와 같이 개인키를 생성한다. (아래 예에서는 server.key 이름으로 저장함)

$ openssl genrsa -out server.key 2048

결과로 server.key 파일이 만들어진다.

CSR 생성

인증서 생성시 사용할 config 파일을 아래와 같이 만든다. (아래 예에서는 파일 이름을 server.conf 라고 하였음, 이 중에서 특히 req_ext 탭의 subjectAltName 및 alt_names 탭의 DNS.1 부분이 중요함)

[req]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn
req_extensions = req_ext

[dn]
C = KR
ST = 도 이름
L = 시 이름
O = 회사 이름
OU = 조직 이름
CN = 인증서 이름
emailAddress = 이메일주소

[req_ext]
subjectAltName = @alt_names

[alt_names]
DNS.1 = 도메인 주소

이제 아래와 같이 실행하면, CSR(Certificate Signing Request) 파일이 생성된다. (아래 예에서는 server.csr 이름으로 저장함)

$ openssl req -new -key server.key -out server.csr -config server.conf

참고로 생성된 CSR 파일의 내용은 아래와 같이 확인할 수 있다.

$ openssl req -text -in server.csr -noout

사설 인증서 생성

이제 아래와 같이 실행하면 self sign 된 서버 인증서 파일이 생성된다. (아래 예에서는 인증서 유효 기간을 10년으로 하였고, 인증서는 server.crt 이름으로 저장함)

$ openssl req -x509 -key server.key -in server.csr -out server.crt -days 3650 -config server.conf -extensions req_ext

참고로 생성된 인증서의 내용은 아래와 같이 확인할 수 있다.

$ openssl x509 -text -in server.crt -noout

Windows에서도 server.crt 파일을 더블 클릭하면 정보를 확인할 수 있는데, 특히 반드시 "주체 대체 이름" 항목이 있어야 하고 여기에 웹 사이트 주소가 들어 있어야 한다.

HTTPS 서버 설정

아래 예는 아파치 웹서버를 기준으로 한 것으로, 다른 웹서버인 경우에는 해당 서버의 HTTPS 서버 설정에 맞추면 된다.
최종으로 생성된 server.crt, server.key 파일을 아래 예와 같이 /etc/apache2/ssl/ 디렉토리를 생성하여 이곳에 복사한다. (ssl 디렉토리 경로는 변경 가능)

$ sudo mkdir /etc/apache2/ssl
$ sudo mv server.* /etc/apache2/ssl/

이후 아래와 같이 아파치의 SSL 모듈을 활성화 시킨다.

$ sudo a2enmod ssl
$ sudo service apache2 restart

결과로 /etc/apache2/mods-enabled/ssl.conf 파일이 생성되었음을 확인할 수 있다.
아래와 같이 default-ssl 파일을 복사해서 사용할 도메인 이름으로 파일을 생성한다. (아래 예에서는 myserver.conf 파일 이름 사용)

$ sudo cp -a /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/myserver.conf

이후 /etc/apache2/sites-available/myserver.conf 파일에서 아래와 같이 수정한다.

SSLEngine on
SSLCertificateFile /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key

마지막으로 아래와 같이 사이트를 활성화 시킨다.

$ sudo a2ensite myserver
$ sudo service apache2 restart

HTTPS 접속

클라이언트 브라우저에서는 HTTPS 주소를 접속을 하여 인증서를 다운받는다. (또는 서버에서 생성한 server.crt 파일을 복사해도 됨)
다운받은 인증서를 OS에서 제공하는 인증서 설치 방법으로 root CA 저장소에 설치한다. Windows의 경우 인증서를 "신뢰할 수 있는 루트 인증 기관" 저장소에 설치하면 된다.
이후 브라우저를 닫은 후에 다시 HTTPS 주소로 접속해 보면 정상적으로 HTTPS로 접속된 것을 확인할 수 있다.

카테고리:

업데이트: