기억 휘발 방지소

AWS EC2에 배포한 서버에 Certbot으로 https 인증받기 (2/2) 본문

AWS

AWS EC2에 배포한 서버에 Certbot으로 https 인증받기 (2/2)

choice91 2022. 8. 19. 14:57
728x90
반응형

이전글 보기 👇

 

AWS EC2에 배포한 서버에 Certbot으로 https 인증받기 (1) - EC2와 도메인 연결

EC2에 배포한 서버에 https를 적용했던 과정을 정리해보았습니다. SSL 인증서를 받기 위해 도메인을 먼저 구매해주었습니다. 도메인은 가비아에서 가장 싼걸로 구매해주었습니다. .shop이나 .site가

choice91.tistory.com

 

저번 글에서 EC2와 도메인 연결이 끝났고

이번 글에서는 nginx 설치부터 certbot으로 ssl 인증서 발급해서 적용하는 것까지 해보도록 하겠습니다.

 

📌 Nginx 설치

sudo apt-get install nginx

 

설치가 끝났으면 기본설정을 해주어야합니다.

vi 편집기를 사용해 편집해주겠습니다.

sudo vi /etc/nginx/sites-avaiable/default

 

위에 명령어를 입력하여 vi로 파일을 열고

server_name에 DNS명을 적어주고

proxy_pass에 'http://127.0.0.1:포트번호'를 적어주겠습니다.

server {
    # SSL configuration
    #
    # listen 443 ssl default_server
    # listen [::]:443 ssl default_server
    #
    # Note: You should disable gzip for SSL traffic.
    # See: https://bugs.debian.org/773332
    #
    # Read up on ssl_ciphers to ensure a secure configuration.
    # See: https://bugs.debian.org/765782
    #
    # Self signed certs generated by the ssl-cert package
    # Don't use them in a production server!
    # 
    # include snippets/snakeoil.conf;
    
    root /var/www/html;
    
    server_name example.site;
    
    location / {
    	# First attempt to serve request as file, then
        # as directory, then fail back to displaying a 404.
        # try_files $uri $uri/ =404;
        proxy_pass http://127.0.0.1:8080;
    }
}

 

📌 Certbot 설치 및 인증서 발급

certbot 설치

sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

 

Certbot 설행

sudo certbot --nginx

 

Certbot 실행을 하면 먼저 이메일을 적으라고 나온다. 본인 이메일을 적어주면 된다.

 

약관동의: y

 

EFF 소식받기: n

 

마지막은 캡처를 못했는데 

Which name would you like to activate HTTPS for? 라는 질문이 나오고 아까 위에서 /etc/nignx/sites-available/default에서 server_name에 적어준 DNS 주소가 나오는데 그 주소를 선택 후 엔터를 치면 끝납니다.

 

간혹 다음과 같이 나올 수도 있는데 그 때는 DNS 주소를 직접 입력해주면 됩니다.

제대로 발급되면 pem 키가 생성되고 해당 키를 사용하면 됩니다.

만료기한은 22년 11월 16일

 

📌 서버에 적용하기

위에서 발급한 키를 서버에 적용해주면 됩니다.

const express = require('express')
const http = require('http')
const https = require('https')
const fs = require('fs')

const app = express()

app.get('/', (req, res) => {
  res.send('hello world')
})

const httpsOptions = {
  ca: fs.readFileSync('/etc/letsencrypt/live/~~~.site/fullchain.pem'),
  key: fs.readFileSync('/etc/letsencrypt/live/~~~.site/privkey.pem'),
  cert: fs.readFileSync('/etc/letsencrypt/live/~~~.site/cert.pem'),
}

http.createServer(app).listen(8080, () => {
  console.log('http')
})

https.createServer(httpsOptions, app).listen(8090, () => {
  console.log('https')
})

 

❗ 인증서에 대한 permission denied

다시 EC2에 배포 후 실행시켜보면 발급받은 pem 키에 대한 permission denied 가 발생하는데 이건 다음과 같이 해결해주었습니다.

sudo chown ubuntu -R /etc/letsencrypt
 

Nodejs ssl key permission denied

I am getting this error when trying to access my ssl key and cetificate from my nodejs app: As you can see, I've added my user to hace permission on the files.. I don't know what else to do?

stackoverflow.com

 

❗443번 포트 사용할 수 없음

배포한 서버에 443번 포트를 사용하게 되면 Error: listen EACCES: permission denied 0.0.0.0:443 에러가 발생할 수 있습니다.

유닉스계열 시스템에서는 root가 아닌 사용자는 1024보다 낮은 포트로 바인딩할 수 없기 때문이라고 합니다.

이 문제는 서버 포트를 1024보다 높은 번호로 설정을 하고 443번 포트로 들어오는 요청을 서버포트로 리다이렉트 시켜주면 해결할 수 있습니다.

 

443번 포트로 들어오는 요청을 8090번 포트로 리다이렉트 시켜주었습니다.

sudo iptables -t nat -I PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 8090
728x90
반응형