본문 바로가기

라즈베리파이

라즈베리파이4 설정(2) - NGINX에 SSL 인증서 할당받기(HTTPS 지원)

지난번 글에서는 라즈베리파이에 NGINX와 PHP를 설치하여 웹서버를 구축했다.

 

 

최근 제작되는 웹사이트들은 SSL 인증서 기반의 HTTPS 프로토콜을 대부분 지원한다.

라즈베리파이에서 HTTPS 프로토콜을 지원하도록 하려면 어떻게 해야 할 것인가?

 

여기서는 Let's Encrypt에서 제공하는 무료 인증서를 이용하여 HTTPS 사이트를 구축해 보도록 하겠다. Let's Encrypt는 유효기간이 3개월인 무료 인증서를 제공하며, 무제한 추가 갱신을 할 수 있도록 허용한다. 즉, 도메인만 있으면 무료 인증서를 기간의 제한 없이 사용할 수 있다.

 

우선, 인증서를 제공받기 위해서는 본인 소유의 도메인을 가지고 있어야 한다. 구매 방법은 여러 블로그에 소개되어 있으니 참고하도록 한다. 그럼, 도메인을 소유하고 있다고 가정하고 아래 순서대로 진행해 보겠다.

 

1. 라즈베리파이 홈페이지 외부 접속 허용하기

외부에서 라즈베리파이 홈페이지에 접속하려면 공유기 설정을 바꿔줘야 한다. 대부분의 공유기가 외부 접속을 내부 IP로 전달하는 "포트 포워딩" 기능을 제공하고 있다. 아래 그림은 ASUS 공유기 설정 화면이다. 아래 그림처럼 80포트와 443포트를 라즈베리파이 IP로 설정해 주도록 한다.

 

본인의 도메인 주소를 공유기 외부 IP로 설정한 후 도메인으로 접속을 시도해 보자. 아래 그림처럼 보인다면 최소한의 준비는 완료된 것이다.

 

2. SSL 인증서 발급 받기

2-1. certbot 패키지 설치

certbot은 Let's Encrypt의 SSL 인증서 확보를 위한 자동화된 도구이다. putty.exe를 이용하여 라즈베리파이에 SSH로 접속한 후 아래 명령을 이용하여 certbot 패키지를 설치한다.

# apt install certbot

 

2-2. certbot 이용, SSL 인증서 발급받기

예전에는 certbot을 이용 인증서를 발급받을 때 도메인 주소를 모두 명시해야 했었다. 하지만 최근에는 하위 도메인을 모두 포함할 수 있도록 wildcard 도메인 주소(*.domainname.com)를 지원하고 있다. 이왕 발급받는 김에 wildcard 도메인 인증서로 발급받도록 하자.

아래 명령을 이용하여 wildcard SSL 인증서를 요청할 수 있다.

# certbot certonly -d domain.com -d *.domain.com \
  --manual --preferred-challenges dns \
  --server https://acme-v02.api.letsencrypt.org/directory

 

이후, 이메일 주소와 약관 동의, 이메일 수신 동의, IP 추적 동의 문의가 나오는데 모두 확인하도록 한다. 여기서 Cancel이나 No를 선택할 경우 인증서 발급이 중지되니 주의하도록 한다.

 

동의를 다 마치고 나면 아래 화면처럼 DNS TXT 영역에서 _acme-challenge를 생성하고 주어진 값을 입력한 후 엔터키를 치라고 나온다.

 

이때, 본인이 가입한 도메인 관리 홈페이지에서 TXT 레코드를 추가해 주어야 한다.

추가후 한참 있어야 추가된 레코드가 인터넷에 적용 되니 주의하여야 한다. 레코드 추가후 최소 5~10분 경과한 후 엔터키를 쳐 주어야 한다. 두 번째 경우도 마찬가지 이다. 여기서 주의할 점은 두 번째 레코드 추가시에 첫 번째 레코드 값을 지우면 안된다.

 

나의 경우, dnszi.com에서 도메인을 관리하고 있으므로, TXT 레코드 추가시 아래 그림과 같은 모양이 된다.

 

아래와 같은 메시지가 나왔다면 성공적으로 인증서를 발급받은 것이다. 혹시 그렇지 않고 에러 메시지가 발생했다면 TXT 레코드 추가 후 너무 빨리 엔터키를 쳤을 가능성이 높다.

 

이럴 겨우 추가해논 TXT 레코드를 모두 삭제하고 처음부터 다시 시도해야 한다.

2-3. NGINX 설정 변경하기

이제 발급받은 인증서를 NGINX 웹서버에 적용할 순서이다. "/etc/nginx/sites-enabled/default" 파일을 vi나 nano 편집기를 이용하여 열어 아래 내을을 찾도록 한다.

server {
    listen 80 default_server;
    ....
}

 

위의 설정 내용("}") 밑에 아래 내용을 추가하면 된다.

server {
    listen 443;
    listen [::]:443;

    root /var/www/html;
    index index.php index.html index.htm;
    location / {
        try_files $uri $uri/ =404;
    }

    ssl on;
    ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem;

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.3-fpm.sock;
    }
}

 

추가가 완료 되었다면 아래 명령으로 NGINX를 재시작 하도록 한다.

# /etc/init.d/nginx restart

 

여기까지 수행하였으면 "https://본인도메인"으로 접속해 보도록 하자. 아래처럼 보인다면 정상적으로 설정이 완료된 것이다.