Apache2 웹서버에 https 적용하기 (Let's Encrypt SSL Certificate)

    반응형

     

    가장 즐겨 사용하는 장난감(?) 중 하나는 미니PC에 구축해놓은 VMWare ESXi 6.5다. 인텔 i5 CPU와 SSD 256G x 2 ea, 32G 램이 달려 있는 이 미니PC에는 리눅스, Windows Server와 Windows Pro 등 여러개의 가상머신을 구성해두었다. 물론 스펙이 딸리니 동시에 4개 이상은 조금 무리이긴 하다. 하지만 이것저것 테스트를 하는데는 전혀 문제가 없다.

     

    그런데 요즘은 조금만 돈을 들이면 그다지 부담되지 않는 저렴한 요금만으로도 가상서버를 구축할 수 있는 클라우드 서비스도 있다. 예를 들자면 Vultr.com 이라는 클라우드 사이트에서는 최저 5$/월이면 vCPU 1개와 RAM 1G, 트래픽 1TB, SSD 25GB의 가상머신을 사용할 수 있다. 게다가 사용하는 VM의 Snapshot이 무제한 무료다. 이 Snapshot을 이용해 여러개의 가상머신을 생성할 수도 있다.

     

    여담은 여기까지 하고... 이 vultr.com에서 구동하고 있는 우분투리눅스에 ssl을 적용할 일이 생겼다. 예전 포스트에서 cafe24.com의 호스팅 웹사이트에 ssl 인증서를 적용해 https를 구현하는 방법을 포스팅한 적이 있다. 이렇게 여러사람이 한대의 서버에서 웹호스팅 서비스를 받을 경우 호스팅업체의 도움이 없다면 적용이 불가하다. (호스팅업체에서 자동화해 주면 좋지만...)

     

    단독서버 호스팅이나 직접 서버를 운영한다면 다음과 같은 순서에 의해 ssl을 적용하고 https를 지원할 수 있다.

     

    운영체제 및 웹서버 환경

     

    환경은 Ubuntu 19.10과 Apache 2.4.41 이다. 그리고 OpenSSL 과 관련된 모든 업데이트도 최신으로 업데이트되어 있다. 

     

    SSL 인증서는 무료 SSL 인증서인 Let's Encrypt의 SSL 인증서를 적용한다. 다른 SSL 인증서 업체와는 달리 무료이며 단, 유효기간이 3개월이어서 배치작업 또는 수동으로 3개월 만료전에 인증서를 주기적으로 재발급 받아야 한다.

     

    letsencrypt 패키지 설치 및 Let's Encrypt SSL 인증서 발급

     

    먼저 apt-get 명령을 통해 다음과 같이 letsencrypt 라는 패키지를 설치한다.

     

    root 계정에서 실행하면 아래 화면과 같이 명령을 실행해도 되지만 root 계정이 아니라면 다음과 같이 sudo 명령을 앞에 붙여 실행해야 한다.

     

    $ sudo apt-get install letsencrypt 

     

    linux 서버에 let's encrypt ssl인증서 패키지 설치
    let's encrypt ssl 패키지 설치

    설치가 완료되었다면 인증서를 발급받는다.

    apache 웹서버 ssl 인증서 발급
    ssl 인증서 발급

    -- webroot-path 는 아파치웹서버의 DocumentRoot 경로다. 

     

    -d korea.XXXX.XXXX 에는 도메인주소다. 예를 들면 www.naver.com 과같이 전제 도메인주소를 입력한다.

     

    1, 2 선택하는 옵션이 표시되는데 webroot 선택한다.

    그리고 관리자의 이메일주소를 입력한다.

    마지막에 동의 (A)gree 를 선택한다.

    ssl 인증서 발급 완료

    입력한 이메일 주소로 메일을 수신하겠느냐를 묻는다. 그냥 Y를 선택했다. 

     

    인증서가 발급되었다고 나오고 "IMPORTANT NOTES:"에 인증서가 어느 경로에 생성되었는지를 알려준다. 그리고 인증서가 언제 만료되는지도 알려준다. 

     

    게다가 어떻게 만료된 인증서를 새롭게 갱신(renew)할 수 있는지도 알려준다. 

    엔지니어들이여...!! 제발 이런 메시지가 나오면 무시하지 말고 꼼꼼히 읽고 메모해 두자...!!

     

    발급된 인증서 파일 확인 및 웹서버 설정 변경

     

    발급된 Let's Encrypt의 SSL 인증서 파일은 아래와 같은 경로에 저장된다. 실제 파일은 archive 디렉토리 아래의 도메인주소 경로아래에 있으며 앞의 화면에서 보듯 live 디렉토리아래로 심볼릭 링크가 걸려 있다.

     

    발급된 let's encrypt ssl 인증서가 저장되는 경로
    발급된 let's encrypt ssl 인증서가 저장된 경로

    아마도 certbot renew 명령으로 갱신할 경우 archive 디렉토리의 파일들이 업데이트 되는 것 같다. (이건 3개월 뒤에 확인 가능함)

     

    이렇게 SSL 인증서 파일들이 생성되면 웹서버에 해당 인증서 파일을 알려줘야 한다. 인증서 설정은 아래와 같이 웹서버 설정의 ssl 관련 conf 파일에 포함되어 있다. (앞의 000은 버전이나 상황에 따라 없을 수도 있다.)

    Apache 웹서버의 ssl 인증서 설정 파일 (default-ssl.conf)
    Apache 웹서버의 ssl 인증서 설정 파일 (default-ssl.conf)

    vi 또는 nano 명령으로 000-default-ssl.conf 파일을 열고  몇개의 설정을 수정해준다.

    apache 웹서버의 ssl 활성화 설정

    만약 아파치 웹서버에 https를 지원하도록 설정하였다면 SSLEngine 옵션이 on이 되어 있어야 한다. 만약 이 옵션이 off 이면 아파치에 SSL 모듈이 설치되지 않았거나 로딩되지 않은 상태다. 다음의 명령을 통해 OpenSSL을 설치하고 아파치의 SSL 모듈을 구동해줘야 한다.

     

    o OpenSSL 설치

      - sudo apt-get install openssl

     

    o Apache2 SSL 모듈 로드

      - sudo a2enmod ssl

     

    여기까지 작업한 뒤 위 화면처럼 SSL 설정을 변경해준다.

     

    설정을 변경한 뒤 아래 명령을 다시한번 실행하여 기본웹사이트의 SSL(https) 설정을 적용하고 활성화한다.

    apache 웹서버의 ssl 설정 적용하기

    그리고 다음 명령으로 웹서버를 재기동한다.

     

    o sudo service apache2 restart

     

    http 접속을 https로 리다이렉션 하기

     

    하지만 이용자가 http로 접속하면 ssl을 통한 암호화 통신은 적용되지 않는다. 따라서 http(tcp/80)으로 접속할 경우 https(tcp/443)으로 리다이렉션해줘야 한다. 여러 방법이 있지만 가장 확실하고 빠른 방법은 아파치2에서 무조건 http를 https로 리다이렉션 하도록 하는 방법이다.

     

    아래와 같이 아파치의 DocumentRoot 디렉토리에 .htaccess 파일을 생성하고 아래 내용을 추가하는 것이다. 

    apache web server, http를 https로 리다이렉션 설정하기
    Apache 웹서버에서 http를 https로 리다이렉션 설정하기

    이 방법은 아파치2의 mod_rewrite 모듈을 이용하는 것이기 때문에 아파치에 mod_rewrite 모듈이 설치되고 로드되어 있지 않다면 동작하지 않는다.

     

    만약 Apache2에 mod_rewrite 모듈이 설치되어 있다면 다음의 명령을 수행한다.

     

    a2enmod rewrite

     

    이렇게 설정하면 웹브라우저에서 http로 접속을해도 https로 자동으로 전환된다.

     

    브라우저에서 확인하기

     

    적용한 웹사이트에 http로 접속하면 아래와 같이 자동으로 https로 전환되어 URL 앞에 자물쇠가 보인다.

    그리고 자물쇠를 클릭해 인증서 정보를 확인하면 Le's Encrypt 인증서임을 확인할 수 있다.

     

     

    #ssl인증서 #Apache2_https_적용하기

    댓글(3)

    Designed by JB FACTORY