Posted in: AWS, Elastic Compute Cloud

HTTPS 지원 | 웹 서버를 보호하는 방법

제 블로그 AWS EC2 카테고리에 올려져있는 글을 보고 Amazon Linux 2 인스턴스를 만드신 분들은 포트 22, 80, 443 보안 그룹 구성이 되어 있을 텐데요. 현재 인스턴스 서버에 연결되있는 도메인이나 IP로 접속하면 포트 80(HTTP) 유형으로 접속이 됩니다.

HTTP 프로토콜을 실행하는 웹 서버는 송신하거나 수신하는 데이터에 대해 아무런 전송 보안 기능도 제공하지 않습니다. 웹 브라우저를 사용하여 HTTP 서버에 연결할 때 방문하는 URL, 수신하는 웹 페이지의 내용, 제출하는 HTML 양식의 내용(암호 포함)이 모두 네트워크 경로를 따라 어디서든 엿보려는 사람들이 볼 수 있습니다.

요즘같이 보안이 중요한 시대에 웹 서버를 안전하게 보호하기 위한 최선의 방법은 SSL/TLS 암호화로 데이터를 보호하는 HTTPS(HTTP Secure) 지원 기능을 설치하는 것입니다.

해당 게시물을 통해 얻는 것


현재 제 블로그는 Let’s Encrypt 인증 기관을 통해 서버 보안 설정이 되어있습니다. AWS EC2 Amazon Linux 2 인스턴스로 만들어진 여러분들의 웹 서버도 해당 게시글을 참고하여 Let’s Encrypt 인증을 받는다면 제 블로그처럼 보안 설정이 됩니다.

Amazon Linux 2에서 Certbot의 Let’s Encrypt


Let’s Encrypt 인증 기관은 전체 인터넷을 암호화하기 위한 EFF(Electronic Frontier Foundation) 작업의 중요한 부분입니다. 그 목표에 따라, Let’s Encrypt 호스트 인증서는 사용자의 개입을 최소화하면서 생성, 검증, 설치 및 유지되도록 설계되었습니다.

덕분에 우리는 보다 쉬운 방법으로 암호화 작업을 할 수 있습니다. Certbot 프로그램으로 2048비트 RSA 키에 기반을 둔 TLS 인증서를 받을 수 있습니다.

설치 준비


Certbot을 설치하기 전에 다음 절차를 완료합니다.

EPEL(Extra Packages for Enterprise Linux) 7 리포지토리 패키지를 다운로드합니다. Certbot에 필요한 종속성을 공급하는 데 필요합니다.

[ec2-user ~]$ sudo wget -r --no-parent -A 'epel-release-*.rpm' http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/

/home/ec2-user/로 이동하고 위 명령으로 EPEL을 다운로드합니다.

EPEL이란 Extra Packages for Enterprise Linux 의 약자로 기업용 리눅스 환경을 위한 추가 패키지를 의미합니다.

[ec2-user ~]$ sudo rpm -Uvh dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-*.rpm

다음 명령과 같이 리포지토리 패키지를 설치합니다.

[ec2-user ~]$ sudo yum-config-manager --enable epel*

다음 명령과 같이 EPEL을 활성화합니다.

[ec2-user ~]$ sudo yum repolist all 

… 

epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 enabled: 12949+175 

epel-debuginfo/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 - Debug enabled: 2890 

epel-source/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 - Source enabled: 0 

epel-testing/x86_64 Extra Packages for Enterprise Linux 7 - Testing - x86_64 enabled: 778+12 

epel-testing-debuginfo/x86_64 Extra Packages for Enterprise Linux 7 - Testing - x86_64 - Debug enabled: 107 

epel-testing-source/x86_64 Extra Packages for Enterprise Linux 7 - Testing - x86_64 - Source enabled: 0 

...

그러면 위와 비슷한 정보가 출력됩니다.

<VirtualHost *:80> 

    DocumentRoot "/var/www/html" 

    ServerName "example.com" 

    ServerAlias "www.example.com 

</VirtualHost>

Apache 구성 파일인 /etc/httpd/conf/httpd.conf를 편집합니다. “Listen 80” 명령을 찾고 이 명령 뒤에 다음 줄을 추가하여 예제 도메인 이름을 실제 일반 이름 및 주체 대체이름(SAN)으로 교체합니다.

[ec2-user ~]$ sudo systemctl restart httpd

파일을 저장하고 Apache를 다시 시작합니다.

Certbot 설치 및 실행


[ec2-user ~]$ sudo yum install -y certbot python2-certbot-apache

다음 명령을 사용하여 Certbot 패키지 및 종속성을 설치합니다. 위 명령어로 Certbot을 설치하기 전 cd ~ 명령어로 홈 디렉터리로 이동하는 것을 추천드립니다.

[ec2-user ~]$ sudo certbot

Certbot이 설치된 디렉터리로 이동 후 Certbot을 실행합니다. 이후 몇 가지 입력란이 나오는데 잘 읽어보고 Y 또는 N을 입력하여 다음 단계로 넘어갑니다.

사용 중인 email을 입력하라고 할때는 제대로 입력하는 게 좋습니다. email을 통해서 Let’s Encrypt 기간이 얼마나 남은 지도 알려주기 때문입니다. Let’s Encrypt의 인증기간은 3달입니다. 3달마다 갱신을 하기 위해선 email 알림을 받는 게 편합니다.

Which names would you like to activate HTTPS for? 

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

1: example.com 

2: www.example.com 

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

Select the appropriate numbers separated by commas and/or spaces,
or leave input blank to select all options shown (Enter 'c' to cancel): 

다음 단계로 넘어가다 보면 위와 같이 HTTPS 활성화를 원하는 도메인이 맞는지 묻는 입력란이 나옵니다. 사용할 도메인이 맞다면 공백으로 남겨두고 Enter를 입력합니다.

위 도메인은 설치 준비 단계에서 했었던 Apache 구성 파일을 편집했던 것을 토대로 결정됩니다. VirtualHost에서 서버 이름과 대체 이름을 입력했었죠.

모든 과정이 끝나면 Certbot은 인증서를 생성하고 Apache를 구성하면서 성공 및 기타 정보를 보고합니다. Apache를 다시 시작하고 기다리면 여러분들의 사이트가 암호화된 것을 확인할 수 있습니다.

설치를 완료한 후 보안 구성 테스트 및 강화에서 설명한 대로 서버의 보안을 최적화할 수 있습니다만 굳이 할 필요는 없습니다.

축하합니다! 해당 게시글까지 완료한 분들은 여러분의 사이트가 2048비트 RSA 키 기반의 보안이 적용되었습니다.

더욱 강력한 보안 설정도 있지만 서버의 사양을 많이 차지하기도 하고 아직은 2048비트 보안도 충분하다는 의견이 많더군요. 정확히는 모르겠지만 그렇구나 하고 넘어갔습니다.

다음 글에서는 리눅스에서 .py파일 만들고 python3 명령으로 실행하는 방법에 대해 알아보겠습니다. 감사합니다!

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다