YOGYUI

ipTime 공유기 시스템에서 SSL 인증서 발급하기 (Let's Encrypt) 본문

홈네트워크(IoT)/일반

ipTime 공유기 시스템에서 SSL 인증서 발급하기 (Let's Encrypt)

요겨 2022. 2. 20. 12:44
반응형

ipTime 공유기에 연결된 웹서버에 HTTPS (HTTP Secure) 연동을 위해 SSL(Secure Sockets Layer) 인증서를 발급받아보자

※ Home Assistant와 Google Assistant 연동할 때 반드시 필요한 작업

Synology 계열 제품 사용 중이라면 애드온으로 쉽게 작업할 수 있는데, ipTime은 약간의 노가다가 필요하다

1. Prerequisite

ipTime 공유기

Nginx 구동중인 리눅스 계열 디바이스

2. 공유기 설정

Nginx 구동중 디바이스에 외부포트 80, 내부포트 80으로 포트포워드 설정

외부 IP 주소를 기억하기 힘들다면 DDNS 설정

Ex) test123.iptime.org

웹서버를 별도로 구동중이지 않다면 (Nginx만 구동 중) 등록된 DDNS로 웹브라우저에서 접속하면 "Welcome to nginx!" html을 볼 수 있다

3. Nginx 설정

/etc/nginx/sites-available에 있는 설정파일에 3줄 추가

- Let's encrypt SSL 인증서 발급시 사용되는 GET 호출 경로 (/.well-known/acme-challenge/)에 대한 권한 및 루트 경로 추가

server{
    listen 80 default_server;
    listen [::]:80 default_server;
    
    root /var/www/html;
    
    index index.html index.htm index.nginx-debian.html;
    
    server_name _;
    
    location / {
        try_files $uri $uri/ = 404;
    }
    
    # 아래 3줄 추가
    location ~ /\.well-known/acme-challenge/ {
        allow all;
        root /var/www/letsencrypt;   
    }
}

4. certbot 설치

리눅스 계열 디바이스(굳이 nginx 구동중인 디바이스 아니라도 된다)에서 certbot 설치 

(Windows나 Mac 계열은 테스트해보지 않음)

sudo apt install certbot

5. certbot 인증서 발급

webroot 방식으로 발급받으면 된다

sudo certbot certonly -a webroot -w /var/www/letsencrypt -d test123.iptime.org

-w: webroot 경로 지정 

-d: ipTime 공유기의 DDNS 주소를 입력하면 된다

[문제 발생]

iptime.org 도메인은 너무 많은 국내 사용자들이 발급받은 바람에 CAA record 오류가 발생하고 인증서 받급이 되지 않는다... 

만약 ipTime NAS 제품 사용 중이라면 ipdisk.co.kr DDNS 로 발급받으면 된다고는 하는데, 좀 더 보편적인 방법으로 무료 DNS를 배정받아 문제를 해결해보자

6. DuckDNS 접속

https://www.duckdns.org/

 

Duck DNS

Duck DNS free dynamic DNS hosted on AWS news: login with Reddit is no more - legal request support us: become a Patreon

www.duckdns.org

구글 아이디로 로그인

서브도메인에 원하는 도메인명 기입한 뒤 'add domain' 버튼 클릭 (Ex: test123)

이름이 겹치치 않는다면 아래와 같이 정상적으로 DDNS가 추가되고, xxx.duckdng.org 도메인으로 접속할 수 있게 된다 (current ip에 나온 ipv4 주소가 본인 공유기의 외부 주소와 같은지 확인)

7. 인증서 발급

5번에서 수행한 명령어를 도메인 주소만 바꿔서 진행

sudo certbot certonly -a webroot -w /var/www/letsencrypt -d test123.duckdns.org

'Congratulations! Your certificate and chian have beed saved at:" 메시지가 나오면 정상적으로 SSL 발급이 완료된 것이다

아직까진 duckdns는 발급에 문제가 없는데, 만약 동일하게 CAA 오류가 발생한다면 다른 DNS 발급 사이트를 찾아봐야 한다 (제일 속편한건 유료 도메인 발급!)

최초 발행 시 파일 경로의 접근 권한이 제한되어 있다

chmod 명령어로 접근 권한을 바꿔주자 (읽기 권한만 추가해주면 된다)

sudo chmod 444 /etc/letsencrypt/live

 8. Nginx SSL 적용

인증서 파일 (fullchain.pem)과 키 파일 (privkey.pem)을 이용해 nginx 설정파일에 3번에서 알아본 https 접속에 대한 설정을 추가해주면 된다 (기존 80 포트 설정 아래에 추가)

server {
    listen 443;
    listen [::]:443;
    server_name _;
    
    ssl on;
    ssl_certificate /etc/letsencrypt/live/test123.duckdns.org/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/test123.duckdns.org/privkey.pem;
        
    location / {
        try files $uri $uri/ = 404;
    }
}

server_name과 location은 본인의 웹서버 구성에 따라 변경하면 된다

 

설정파일 저장 후 nginx 재시작

sudo service nginx restart

이제 https://test123.duckdns.org로 접속해서 원하는 화면이 나오는지 확인!

9. TODO

발급 시 메시지를 보면 "Your cert will expire on YYYY-mm-dd" 라고 기입되어 있다

즉, Let's encrypt를 통해 발급받은 SSL 인증서는 3개월 주기로 갱신해줘야 한다

3개월마다 일일이 수동으로 재발급받는건 너무 수고스러우니, 자동으로 일정 주기로 재발급받는 방법에 대해 따로 알아보도록 한다 (링크1, 링크2 참고할 예정)

 

[참고]

https://www.comodossl.co.kr/certificate/ssl-installation-guides/Nginx.aspx

https://velog.io/@may_soouu/letsencrypt-nginx%EC%97%90-%EC%9D%B8%EC%A6%9D-%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0ssl

반응형
Comments