AWS EC2 HTTPS 설정 방법
많은 글들을 보았을때 대부분 설명되는 내용은 거진 Certificate Manager과 Route 53을 활용해 진행하는 것이다.
Certificate Manager의 경우를 살펴보면 HTTPS를 활용하기 위해서는 SSL 인증서가 필요한 시점이다.
물론 SSL 구글 검색을 통해 인증서를 발급받기 쉽게 설명되어 있음을 확인할 수도 있지만... 만약 내가 저것을 발급받았다고 치면 어떻게 어디다 집어넣어서 준비를 해야하는 것일까? 라는 의문점이 들게 되었다.
아직 초보자인 상황이고 리눅스에 대해서 아직까지도 스스로 공부하고 개척을 하고 있는 상황인 상태다.
그러다 우연히 찾아본 것은 내가 도메인을 발급받았던 곳에서 인증서 발급을 해주는 것이 있었다.
https://xn--220b31d95hq8o.xn--3e0b707e/
내도메인.한국 - 한글 무료 도메인 등록센터
한글 무료 도메인 내도메인.한국, 웹포워딩, DNS 등 무료 도메인 기능 제공
xn--220b31d95hq8o.xn--3e0b707e
이곳에서 상단에 인증서 발급버튼을 누르게 되면 다음과 같은 사이트가 나온다.
SSL For Free - Free SSL Certificates in Minutes
Wildcard SSL Certificates Wildcard certificates allow you to secure any sub-domains under a domain. If you want to secure any sub-domains of example.org that you have now or in the future you can make a wildcard certificate. To generate wildcard certificat
www.sslforfree.com
이곳에서 발급해주는 것은 90일간 무료로 발급을 받을 수 있으며 직접 갱신을 해야하거나 그렇지 않으면 입력한 카드 정보에 따라서 90일 뒤 삭제를 하거나 갱신하지 않으면 자동으로 결재되는 시스템으로 보인다. 하지만 찾아본 바로는 발급은 되지만 서버에 등록하는 방법에 대해서는 직접 해보지를 않아서 모르겠지만 이부분은 나중에 따로 공부를 해서 포스팅을 해보도록 해야겠다.
아무튼 이제 아래의 포스팅 다음 부분이라고 생각하면 되는데 80포트를 열어서 도메인만 입력하더라도 8080으로 되었던 것을 80포트에 연결했으니 자동으로 들어와지는 것은 확인 했으나 로그인 기능에서 진행되고 있는 구글 로그인이라든가 페이스북 로그인의 경우에는 HTTPS가 진행되고 있어야 한다.
[Ubuntu] Certbot(Nginx)을 이용해 code-server에 https 적용하기.
앞서 작성한 code-server에 HTTPS를 적용해 보도록 하겠습니다. 이번 글에선 certbot의 nginx옵션 이용해 인증서를 발급받고 적용해 보도록 하겠습니다. 편의를 위해 code-server 설치와 nginx를 통한 역방향
smoh.tistory.com
이곳에서 정보를 얻기는 했지만, 문제점이 발생되는 것을 파악했다.
이곳에서 알려준 방식으로 할 경우 나의 경우에는 서버배포를 했을때 속도가 현저히 느려지는 것을 파악해볼 수 있었다.
(정답인지는 알 수 없으나 개인적인 생각으로는 내가 처음 배운 것은 available에 서버를 생성해서 코드를 입력 한 후 enabled에 연결을 시켜서 진행하는 방식이었는데 이때는 속도가 떨어지지 않았으나 conf 설정 방법으로 할 경우 느려진다. 개인적으로 보면 conf은 전체를 설정하는 것인데 전체를 건드리다보니 스프링부트가 진행되는 속도가 여러가지를 거쳐 오다보니 느려진 것이 아닐까 생각이 들었다. 또한 이곳에 잘못 설정을 하게 되면 싹다 갈아 엎어야 하는 경우가 발생하니 주의하자.)
또한 해당 글의 경우는 기본적으로 HTTPS를 기본으로 잡은게 아닌 'HTTPS로도 접근 가능' 하게 설정한 것으로 보인다.
프로젝트에서 진행 중인 사이트가 srbt.kro.kr인데 일반적으로 도메인을 입력해서 들어가면 HTTPS가 아닌 HTTP로 된다.
물론 HTTPS가 안되는 것은 아니지만 직접 입력을 넣어야 하는 상황이 발생되며 HTTPS로 해서 로그인을 하게되면 자동으로 HTTP로 변환이 되어버린다.
그래서 내 생각으로는 고정값이 필요한 상황이다 생각이 들어서 찾아보다가 Certbot으로 우선 SSL을 발그받고 코드를 변경하는 방법인 것이다.
기본적으로 HTTPS의 경우는 443 포트를 사용하고 있으며 반드시 AWS 에서 각자의 보안 그룹에 443 포트를 열어줘야 한다.
이제 우분투를 통해서 Nginx는 설치가 되어 있으니 제외하고 Certbot을 설치해줘야 한다.
Certbot은 SSL발급과 함께 설정을 잡아주는 용도라고 생각해야할 것 같다.
$ sudo apt install certbot
$ sudo apt install python3-certbot-nginx
certbot설치는 이해가 가지만 python3-certbot-nginx에서 파이선 부분은 솔직히 잘 모르겠으나 nginx의 경우는 인터넷을 뒤적거리다보니 추측이 되는 것인데 이 리눅스는 nginx를 기반으로 돌리는 것이기 때문에 이거에 알맞는 폴더에 SSL을 넣어두겠다는 뜻으로 하는것 같다.
(물론 맞는지는 알 수 없으나 다른 글에서는 nginx대신에 아파치를 입력하던 경우도 있었다.)
두가지를 이제 설치를 했다면 이제 SSL을 발급받아야할 차례다.
$ sudo certbot certonly --nginx
처음 하는 사람들인 경우에는 이메일 주소를 입력하라고 할 것이다. 그대로 입력하고 동의하라는 것 하면 된다. 위의 이미지처럼 나오는 이유는 내가 기존에 있었기 때문에 바로 도메인 입력하라고 나온 것이다.
나의 경우는 기존에 있는 건데 설정을 뭐 새로하겠냐 아니면 그냥 유지하겠냐 뜻으로 보면 되는데 처음 시작하는 사람은 이런게 안뜨고 쉽게 넘어가는 모습을 볼 수 있다.
(나는 그대로 유지를 하겠다.)
결과적으로 fullchain.pem과 privkey.pem이 해당 경로에 생성된 것을 볼 수 있다. 아까 도메인 입력하라는 부분 덕분에 pem 키 명 앞에 srbt.kro.kr가 표기가 된 것이다.
이제 해당 폴더에 기가 생성되었으니 nginx를 설정해줄 차례다.
$ cd /etc/nginx/sites-available/
/etc/nginx/site-available$ sudo nano srbt
이곳에서 역시 현재 생성되어있는 혹은 기존에 있는것을 삭제하고 새롭게 만들어도 되나 아무튼 나는 기존에 있는 것을
sudo rm srpbt를 입력하여 삭제를 하였고 이름 변경을 위해 srbt로 새롭게 생성 해서 작성을 하였다.
server {
listen 80;
server_name srbt.kro.kr; [수정필요]
rewrite ^ https://$server_name$request_uri? permanent;
}
server {
listen 443 ssl;
server_name srbt.kro.kr; [수정필요]
ssl_certificate /etc/letsencrypt/live/srbt.kro.kr[수정필요]/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/srbt.kro.kr[수정필요]/privkey.pem; # managed by Certbot
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://localhost:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
}
내용을 살펴보면 80포트로 들어오는 srbt.kro.kr에 대해서 자동으로 https주소로 변환 하겠다는 것을 표현으로 끝낸 뒤 443 ssl 적용으로 집어넣겠따는 뜻으로 '[수정필요]' 부분에 대해서 반드시 여러분이 발급받은 도메인 주소와 아까 certbot으로 만든 키이름으로 변경을 해줘야 한다. 그리고 완료가 되었으면 컨트롤 + x > y > enter 로 끝.
(프로토콜과 chipers에 대해서는 아직 잘 모르겠다.)
/etc/nginx/sites-available$ ls
default srbt
생성된 자료 확인을 해보면 기존 default와 방금 생성한 srbt가 보일 것이다.
이제 enabled에 주입시키자.
나는 참고로 nginx를 새로 설치하였기 때문에 깨끗한 상황이라 기존에 srpbt는 없어졌고 default가 우선순위로 존재하고 있는데 이를 다시 삭제하고 주입시켜주었다.
/etc/nginx/sites-available$ cd /etc/nginx/sites-enabled/
/etc/nginx/sites-enabled$ ls
default
/etc/nginx/sites-enabled$ sudo rm default
/etc/nginx/sites-enabled$ ls
/etc/nginx/sites-enabled$
/etc/nginx/sites-enabled$ sudo ln -s /etc/nginx/sites-available/srbt
/etc/nginx/sites-enabled$ ls
srbt
만약 나의 srbt가 하늘색이 아닌 빨간색인 경우 잘못된 파일을 가져왔다는 것이다. 스펠링이 틀렸구나 아니면 뭔가 잘못된 것이니 경로를 잘 확인하고 가져와야 한다.
이제 입력할 것을 모두 입력했으니 nginx를 재시작 해야한다.
$ sudo systemctl restart nginx
재시작을 했는데 그냥 아무 문장 없이 끝나야 하는데 뭔가 이상한 글씨가 써진다? 문제가 발생되었다는 것인데
$ sudo nginx -t
이것을 입력으로 무엇이 문제인지 살펴볼 수 있으며 어렵다 생각하지말고 그냥 천천히 해석하면 친절하게 이야기를 해줄 것이다.
이제 문제가 없다면 당신의 사이트는 자동으로 https로 연결이 되는 모습을 확인할 수 있다. 속이 뻥뚫린 기분을 경험 했다.