SSL인증서 적용하여 HTTPS 구현하기 (그누보드 로그인에 https 적용하기)
- 서버보안
- 2016. 6. 26.
웹서버는 기본적으로 HTTP 프로토콜을 사용합니다. 그리고 그누보드와 같은 게시판 소스를 이용하든 직접 개발한 웹 소스의 로그인 폼을 사용하든 로그인페이지에서 입력한 ID와 비밀번호는 스니핑과 같은 기본적인 해킹기법에도 유출됩니다.
로그인 시 입력한 ID와 비밀번호를 네트워크 상에서 가로채는 것을 차단하기 위해서는 http 프로토콜 대신 보안성이 강화된 https 프로토콜을 사용해야 합니다. https는 http 프로토콜의 암호화 버전이라고 생각하면 됩니다. https 의 s는 SSL을 의미합니다.
그런데 https 를 적용하기 위해서는 웹서버에 서버 인증서를 설치해야 합니다. 음..인증서라.. 인증서는 보안이론 중에서도 암호학에 나오는 암호화 기법 중 하나인 PKI(Public Key Infrastructure)를 공부해야 하는 것인데.. 그건 여기서 설명하지 않습니다. 무척 복잡하기 때문이죠.
그리고 웹서버에 https를 적용하기 위해 이 포스트에서 설명하는 서버 인증서는 사설인증서 입니다. 사설인증서를 웹서버에서 https에 적용할 경우 브라우저가 서버로 부터 전달받은 서버 인증서의 발급자를 공인해줄 수 없기 때문에 웹 브라우저에서 https로 서버에 접속했을 때 보안경고창이 뜹니다. 신뢰할 수 없는 보안인증서 관련 보안경고창이 뜨지 않게하려면 윈도의 인터넷 보안 옵션에서 서버에 적용한 인증서를 신뢰할 수 있는 보안인증서로 등록해 주어야 합니다.
하지만 여러 공인인증서 발급기관에서 유료로 발급해주는 서버인증서는 인증서 발급과 동시에 공인인증기관(CA)에 등록되기 때문에 브라우저의 "보안경고"창이 뜨지 않습니다. 그리고 공인인증서 발급기관에서 설치 방법을 친절하게 문서로 설명해주기 때문에 궂이 이 포스트를 보지 않아도 됩니다. 다만 앞부분의 인증서를 생성하는 과정만 다를 뿐 과정은 동일합니다.
1. 서버 인증서 생성하고 설정하기
이 서버는 CentOS 6.6 입니다. 리눅스 입니다. 윈도 서버라면... 다른 곳에서 확인해주세요.
먼저 openssl 명령으로 서버 키를 생성해야 합니다. RSA는 전자서명용 비대칭키 시스템입니다. Triple-DES 암호알고리즘을 사용하며 키 길이는 1024 입니다.
아래의 작업은 /etc/pki/tls/private 로 이동하여 실행합니다.
서버키 비밀번호를 물어봅니다. 새로 적당한 비밀번호를 입력해주면 됩니다. 이 비밀번호는 잊어버리면...망합니다. 여기서 생성하는 서버 인증서를 아파치 웹서버에서 https 접속에 사용하려고 적용한 뒤 아파치를 재구동하면 이 비밀번호를 입력해야 합니다. 그리고 key 파일이름을 server.key로 지정했는데 가능하면 인증서를 적용할 서버의 DNS주소.key로 지정하는 것이 좋습니다. 아래가 생성한 서버키 파일을의 내용을 cat 명령어로 확인한 것입니다.
다음은 CSR 파일을 만듭니다. 여기에는 인증서 발급에 필요한 서명정보들이 들어갑니다. 즉 인증서 발급기관과 인증서를 적용할 서버정보를 입력합니다. 여기서도 server.key, server.csr 그리고 본문에 서버 이름을 lib로 지정했는데 실제로 서비스하는 서버의 도메인주소(풀경로)를 적어주는 것이 좋습니다. 그렇지 않으면 이 서버인증서를 윈도의 보안설정에서 서버 인증서로 등록해도 사이트 정보와 인증서의 서버 정보가 일치하지 않아 인증서 경고창이 계속 뜹니다.
csr 파일을 생성할 때도 앞에서 key 파일을 만들 때 입력한 비밀번호를 물어봅니다. 아래는 key 파일과 csr 파일목록입니다.
앞에서 key 파일을 생성할 때 비밀번호를 입력했습니다. 그런데 이 비밀번호를 아파치 서버를 구동할 때 매번 입력해주어야 합니다. 번거롭겠죠? 그래서 이 비밀번호를 key 파일에서 빼버립니다.
이제 마지막으로 X.509 인증서를 생성합니다.
이렇게 하면 server.crt가 생성됩니다. 이 CRT파일을 /etc/pki/tls/certs 디렉토리로 복사합니다.
앞에서 언급했듯이 이 예제에서는 server 라는 키워드를 사용했지만 웹서버의 도메인주소와 동일한 이름을 사용하는 것이 좋습니다. 예를 들어 웹서버에 접속할 때 http://www.test.co.kr 이라고 입력한다면 www.test.co.kr 이라는 키워드를 서버 www.test.co.kr.key 와 같이 파일명을 만들어 사용해야 합니다. (저 같은 경우는 그랬습니다.)
2. 아파치 웹서버의 ssl.conf 설정
서버에 인증서만 만들어 둔다고 ssl이 그냥 적용되지는 않습니다. 아파치 웹서버에서 그 인증서를 이용해 https 프로토콜 통신에 사용하도록 알려줘야겠죠?
아파치 웹서버의 설정 디렉토리를 뒤져보면 ssl.conf 파일이 있습니다. 그 파일을 열어 다음의 몇줄을 수정합니다.
# Server Certificate:
SSLCertificateFile /etc/pki/tls/certs/lib.sgasol.kr.crt
# Server Private Key:
3. http 접속을 https로 리다이렉션하기
http 프로토콜은 tcp/80으로 접속이 됩니다. 하지만 https는 기본적으로 tcp/443 포트를 사용합니다. 즉 위에서와 같이 웹서버에 https를 적용해도 사용자들이 브라우저에 https 로 접속하지 않고 http로 접속하면 암호화되지 않은 통신을 하게됩니다.
그렇다면 사용자들이 http로 접속을 해도 https로 자동으로 리다이렉션되게 해야겠죠?
여러가지 방법이 있지만 여기서는 아파치 웹서버의 설정을 변경해 자동으로 https로 넘어가도록 합니다.
그러기 위해서는 httpd.conf 파일을 수정해야합니다.
아파치 서버의 DocumentRoot에 대응하는 VirtualHost 섹션이 있습니다. 거기에 위 화면처럼 ServerName을 실제 서비스 도메인명으로 주고 해당 웹서비스 즉 80 포트를 https (443)으로 강제 변경하면 됩니다.
5. 그누보드 도메인설정
만약 그누보드를 사용한다면 다음과 같이 그누 보드에서도 G5 버전에서 https 도메인을 지정해주면 됩니다.
define('G5_DOMAIN', 'https://~~~sol.kr:443');
define('G5_HTTPS_DOMAIN', 'https://~~~ol.kr:443');
그누보드의 config.php 파일을 위와같이 수정하면 완성됩니다.