오늘 GDSC 10 min Tech seminar가 진행됐는데
주제가 HTTP와 HTTPS 였다.
예전에 이 문제로 사이트 배포를 다 해두고도 프로젝트 제출을 못했던 안타까운 경험이 있었기 때문에..,,
항상 정리해야지 해야지 했는데 이번 기회에 발표 내용도 정리하고 기록할 겸 포스팅을 올리려고 한다!
GDSC 10min 세션 링크 ↓↓↓
HTTPS 는 HTTP에서 secure, 보안이 강화된 프로토콜이라고 이해하면 된다.
보안이 강화된
보안이 강화됐다는 것은 패킷이 암호화돼서 중간에 다른 사용자가 이를 가로채 악용할 가능성이 없다는 것을 의미하며
(이미지 참고!)
이런 이유로 믿을 수 있는 사이트임을 보장한다.
적용 방식 : 어떻게 secure 보안을 강화할까?
우선 웹 사이트 동작 과정을 보면
클라이언트 (사용자) ↔ 서버 (사이트) 가 각자 데이터를 주고받으며 상호작용한다.
하지만 이는 데이터가 암호화되어 있는지 사용자는 알 방법이 없다.
따라서 인증을 위한 제삼자를 둬야 한다.
제삼자? 제삼자가 왜 필요해?
예시를 들어 설명하면 나랑 민수는 서로 비밀 일기장을 교환하는 사이다.
근데 아무래도 일기장을 교환하는 중간중간에 철수가 우리의 일기장을 몰래 보는 것 같다 !!
나와 민수는 우리의 일기장을 지키기 위한 보안의 필요성을 느꼈고 머리를 굴렸다
그때 저 멀리 놀고 있는 영희가 눈에 띄었다.
나는 영희에게 간식을 바치는 조건으로 일기장을 열 수 있는 열쇠를 좀 보관해달라고 부탁했다.
이후 나와 민수는 영희의 키를 이용해 일기장을 열어 공유했고
영희에게 받은 키가 없는 철수는 더 이상 우리의 일기장을 몰래 보는 것을 포기할 수밖에 없었다.
맞는 예시인지 모르겠지만 대칭키 비대칭키 제외하고 최대한 간단하게 과정을 설명하면 이와 같을 것 같다.
제삼자인 인증 기관(Let's Encrypt) → 영희
인증키 발급 (TTL/SSL 인증서) → 열쇠
사용자 → 나와 민수
원리는 여기까지고
nginx, java 각각의 적용 방식을 설명하면
※ 우선 무조건 도메인이 연결되어 있어야 한다.
❌ localhost 153.548.21.15 ❌
NGINX 기반 애플리케이션 HTTPS 적용
Cerbot 설치
$ sudo apt-get update
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository universe
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get install certbot python3-certbot-nginx
Nginx Configuration 설정
$ sudo vi /etc/nginx/sites-available/default
이 파일 내부에 server_name 에 HTTPS 로 적용하고 싶은 사이트의 도메인 주소를 넣어준다.
$ sudo nginx -t
// 파일 변경이 잘 적용되었는지 확인
$ sudo systemctl reload nginx
// nginx reload
SSL 인증서 받기
$ sudo certbot --nginx -d {적용할 도메인 주소} -d {www.적용할 도메인 주소}
아까 설치한 cerbot 을 사용해서 도메인을 위한 인증서를 받는다.
$ sudo service nginx restart
nginx 재실행
Spring Boot 기반 애플리케이션 HTTPS 적용
인증키 옮기기
$ sudo su
# cp -r /etc/letsencrypt/archive/[domain_name] /home/secure
아까 인증키 발급받았던 것을 스프링 부트에 적용하기 위해 home/secure 로 옮겨 준다.
파일 변환
# openssl pkcs12 -export -in fullchain2.pem -inkey privkey2.pem -out cert_and_key.p12 -name ttp -CAfile chain2.pem -caname root
# keytool -importkeystore -deststorepass [사용할 암호] -destkeypass [사용할 암호] -destkeystore [생성할 jks 파일명] -srckeystore cert_and_key.p12 -srcstoretype PKCS12 -srcstorepass [PKCS12에서 사용한 암호 (위에서 입력한 암호)]
keytool -importkeystore -deststorepass mymy -destkeypass mymy -destkeystore letsencrypt.jks -srckeystore cert_and_key.p12 -srcstoretype PKCS12 -srcstorepass password
Application.properties 추가
server.port=8080
server.ssl.enabled=true
server.ssl.key-store={키 파일 위치 ex) /home/secure/letsencrypt.jks}
server.ssl.key-store-password= {인증키 비밀번호}
server.ssl.key-password= {인증키 비밀번호}
끝~~
٩( ᐛ )و
'공부 > HTTP' 카테고리의 다른 글
HTTP 웹 기본 지식 ➄ HTTP 헤더 / 캐시, 검증, 조건부 요청 (0) | 2022.01.02 |
---|---|
HTTP 웹 기본 지식 ➃ HTTP 헤더 / 표현, 협상, 일반 정보, 인증, 쿠키 (0) | 2022.01.02 |
HTTP 웹 기본 지식 ③ HTTP 메세지 & HTTP 메소드 (0) | 2021.12.11 |
HTTP 웹 기본 지식 ➁ HTTP 특징 (0) | 2021.12.11 |
HTTP 웹 기본 지식 ① 인터넷 통신 TCP / UDP PORT DNS 웹 브라우저의 요청 흐름 (0) | 2021.11.25 |