리눅스

 

이 글은 SSL 인증서를 무료로 적용할 수 있는 Let's Encrypt 을 다뤄본다.

웹 사이트를 운영하기에 있어, 필수적인 기능이라고 볼 수 있다.

실습환경은 Amazon Linux AMI 이다.

 

현재 본인도 Github Pages 를 통해 포트폴리오 사이트에 SSL 적용하고 있다.

Github Page 에서는 다른 서버와 통신을 위해 https 프로토콜을 사용했기 때문이다.

포트폴리오 사이트 - https://hotehrud.github.io/portfolio-vue

 

 

우선 용어의 개념을 간단히 살펴보자.

 

HTTP, HTTPS 의 차이는 무엇인가?

 

HTTP와 HTTPS 의 차이는 Secure 로써, 보안이라고 볼 수 있다.

HTTPS 프로토콜은 전송되는 데이터를 암호화해서 보냄으로써, 데이터 노출의 안전이 보장된다.

 

https          http

 

위와 같이 주소창에서 쉽게 어떤 프로토콜을 사용하고 있는지 쉽게 알 수 있다.

대부분의 개인정보가 담긴 페이지들은 대부분 https 를 통해 접근하고있다.

 

SSL, HTTPS 는 같다고 보면 되는가?

 

개인적으로 간단명료한 문장인 것 같아 생활코딩의 문장을 가져왔다.

웹이 인터넷 위에서 돌아가는 서비스 중의 하나인 것처럼 HTTPS도 SSL 프로토콜 위에서 돌아가는 프로토콜이다. -생활코딩-

 

 

 

Let's Encrypt 는 단순히 무료로 SSL 인증서를 발급해주는 단체라고 보면 된다.

본격적으로 SSL 을 적용하는 방법을 알아보자.

 

SSL 인증서 발급

 

 

본인은 Git 을 통해 설치하는 방식을 다룬다. 

공식 깃헙 저장소를 참고하길 바란다. (https://github.com/certbot/certbot)

 

1. letsencrypt 관련 모듈을 /opt/letsencrypt 경로에 설치한다.

 

 

// git clone 을 통해 모듈 내려받기

git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt

 

// 폴더 이동

cd /opt/letsencrypt

 

설치한 경로인 /opt/letsencrypt 디렉토리를 확인하면 다음과 같이 설치되었을 것이다.

 

letsencrypt

 

2. SSL 인증서를 생성한다.

 

 

./letsencrypt-auto certonly --standalone -d YOUR_DOMAIN

 

ex) ./letsencrypt-auto certonly --standalone -d mygumi.me

 

Y/N 묻고, 이메일 관련 질문과 생성절차가 진행된다.

인증서가 발급되었다면. 다음과 같이 메시지가 나올 것이다.

 

 

IMPORTANT NOTES:

 

- Congratulations! Your certificate and chain have been saved at:

 

/etc/letsencrypt/live/example.com/fullchain.pem

 

Your key file has been saved at:

 

/etc/letsencrypt/live/example.com/privkey.pem

..........................

 

혹시 ImportError: No module named cryptography.hazmat.bindings.openssl.binding 관련 오류가 난다면, https://github.com/certbot/certbot/issues/2544 참고하길 바란다.

 

발급한 인증서를 확인하기 위해서는 다음과 같은 명령어를 통해 할 수 있다.

 

 

ls /etc/letsencrypt/live

./certbot-auto certificates

 

SSL 인증서

 

Expriy Date 를 보다시피 만료기간(90일)이 존재한다.

만료되기 전에 매번 갱신을 해주어야한다.

이번 글을 쓰게 된 계기도 인증서 만료를 모르고 있었다가 다시 갱신하는 과정에서 다루게 되었다.

자동적으로 갱신하기 위해서는 다음과 같이 설정할 수 있다.

 

 

crontab -e

 

위 명령어를 통해 crontab 파일을 읽은 후, 다음 텍스트를 입력해주면 된다.

 

 

0 0 1 * * /opt/letsencrypt/letsencrypt-auto renew

 

이와 같이 설정하면, 매월 한번 인증서가 자동적으로 갱신되게 된다.

 

SSL 설정(아파치)

 

 

웹 사이트의 HTTPS 를 설정하기 위한 관련 SSL 설정을 해줘야한다.

 

 

vim /etc/httpd/conf.d/ssl.conf

 

ssl.conf 파일을 열어 SSLCertificateFileSSLCertificateFile 의 값을 생성한 인증서 경로로 변경해주면 된다.

 

ssl.conf

 

그 후, 웹 서버를 다시 시작해주면 된다.

 

 

/etc/init.d/httpd restart

 

SSL 인증서 발급과 설정이 완료되었다.

본인의 사이트에 SSL 설정 여부는 아래 사이트를 통해 확인할 수 있다.

https://www.sslshopper.com/ssl-checker.html

 

HTTPS 확인

 

위와 같이 웹 사이트에 HTTPS 프로토콜을 사용하고 있는 모습을 볼 수 있다..

 

마지막으로 Node.js 와 같이 다른 포트(mygumi.me:3000)를 열어 사용할 경우는 다음과 같다.

다음과 같은 코드를 통해 사용할 수 있다.

(참고로 권한 문제로 인해 /live 폴더가 아닌 /archive 폴더의 key파일을 사용했다.)

 

let options = {
  key: fs.readFileSync('/etc/letsencrypt/archive/mygumi.me/privkey1.pem'),
  cert: fs.readFileSync('/etc/letsencrypt/archive/mygumi.me/cert1.pem'),
  requestCert: false,
  rejectUnauthorized: false
}
 
let server = https.createServer( options, app )
 
server.listen(serverConfig.port, (err) => {
  if (err) {
    return console.log(err)
  }
 
  return console.log(`server is listening on ${serverConfig.port}`)
})


 

 

 

 

 

 

 

about author

PHRASE

Level 60  라이트

목숨을 버리고 싸우면 오히려 살 수가 있고 살아 돌아갈 요행을 바라거나 하면 오히려 죽음을 가져오게 된다. -오자

댓글 ( 6)

댓글 남기기

작성
  •    
  •    
  •