Notice
Recent Posts
Recent Comments
Link
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Archives
Today
Total
관리 메뉴

블로그

안드로이드 스마트폰을 홈어시스턴트 서버로 사용하기 #4 Let's Encrypt 인증서 본문

Home Assistant

안드로이드 스마트폰을 홈어시스턴트 서버로 사용하기 #4 Let's Encrypt 인증서

초콜릿밀크 2022. 9. 17. 23:51

2022.09.09 - [Home Assistant] - 안드로이드 스마트폰을 홈어시스턴트 서버로 사용하기 #1 linux deploy 설정

2022.09.09 - [Home Assistant] - 안드로이드 스마트폰을 홈어시스턴트 서버로 사용하기 #2 Home Assistant Core 설치

2022.09.12 - [Home Assistant] - 안드로이드 스마트폰을 홈어시스턴트 서버로 사용하기 #3 삼바 설정


DDNS 설정 + NGINX Reverse Proxy 설정 + Let's Encrypt 인증서 발급

홈어시스턴트 모바일 앱으로 홈어시스턴트 서버에 접속하려면 자체 인증된 인증서로는 접속이 안 된다. 그러므로 let's encrypt 인증서를 발급받아 이용한다.

1. DDNS 설정 (duckdns)

참고: Duck DNS - Home Assistant (home-assistant.io)

DuckDns는 간편한 무료 DDNS 서비스이다. 홈어시스턴트 코어에서도 Intergration을 하나 추가해서 간단히 설정할 수 있다.
https://www.duckdns.org 에 접속해서 구글 아이디로 로그인한다.

sub domain 에 원하는 도메인 네임을 입력하고 add domain 을 눌러서 새 도메인을 추가한다.

configuration.yaml 에 다음 내용을 추가한다.

duckdns:
  domain: 도메인네임 # abcd.duckdns.org 라면 -> abcd 입력
  access_token: #####-#####-#### # token 내용 복사해서 붙여넣기

홈어시스턴트를 재시작하면 이제 자동으로 duckdns 도메인이 스마트폰이 위치한 곳의 외부 ip로 갱신된다.


2. NGINX 설치

nginx 웹서버를 설치하고 실행한다.

sudo apt install nginx
sudo service nginx start

공유기에서 80, 443 포트를 스마트폰 ip로 포트포워딩 한다.

웹브라우저에서 http://도메인네임.duckdns.org 로 접속하면

nginx 웹서버의 안내 페이지가 나온다.


3. Let's Encrypt 인증서 발급

Certbot을 이용해서 간편하게 let's encrypt 인증서를 발급 받을 수 있다. 인증서를 발급할 때 80번 포트로 http 접속이 반드시 가능하여야 한다. 그러므로 http://도메인네임.duckdns.org 로 nginx 안내 페이지 접속이 가능한지 확인하자.

Certbot 설치

sudo apt install certbot python3-certbot-nginx

Certbot 실행

sudo certbot --nginx certonly

이메일 입력, 이용약관 동의 등을 하고 도메인네임.duckdns.org 을 입력한다.
인증이 성공하면 /etc/letsencrypt/live/도메인네임.duckdns.org 디렉토리에 인증서 파일 4개가 발급된다.

  • cert.pem
  • privkey.pem
  • chain.pem
  • fullchain.pem

4. NGINX 리버스 프록시 설정

참고: Reverse proxy using NGINX - Community Guides - Home Assistant Community (home-assistant.io)

리버스 프록시를 사용하기 위해 configuration.yaml에 다음 내용을 추가하고 재시작한다.

http:
  #리버스프록시 설정
  use_x_forwarded_for: true
  trusted_proxies:
    - 127.0.0.1 # 홈어시스턴트 서버와 nginx 서버가 같은 기기에 있으므로 localhost 사용    

/etc/nginx/nginx.conf를 열어 내용을 수정한다.

#user www-data;  # 주석 처리
user root;       # 내용 추가

server_names_hash_bucket_size 64;   # 64가 아닌 경우 #을 지우고 64로 변경

/etc/nginx/sites-available/default 를 열고 내용을 수정한다.

map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

server {
        listen 80 default_server;
        listen [::]:80 default_server;

        ## 기존 내용 유지
        server_name 도메인네임.duckdns.org;

        ## 기존 내용 유지

}

server {
        listen  443 ssl;
        server_name 도메인네임.duckdns.org;

        ssl_certificate /etc/letsencrypt/live/도메인네임.duckdns.org/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/도메인네임.duckdns.org/privkey.pem;

        ssl_protocols TLSv1.2;
        ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
        ssl_prefer_server_ciphers on;
        ssl_session_cache shared:SSL:10m;

        proxy_buffering off;

        location / {
                proxy_pass http://127.0.0.1:8123;
                proxy_set_header Host $host;
                proxy_redirect http:// https://;
                proxy_http_version 1.1;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection $connection_upgrade;
        }
}

nginx를 재시작한다.

sudo service nginx restart

웹브라우저에서 https://도메인네임.duckdns.org 로 접속하면 홈어시스턴트 화면이 뜬다.

5. init 설정에 추가

/etc/rc.local/initscriptservice nginx start를 추가하면 리눅스 디플로이 시작시 nginx 서비스가 실행된다.

Comments