로컬 환경에서는 ws(일반 websocket)만 사용해도 문제가 없다.
하지만, 실제 배포할 때는 얘기가 약간 달라지는데 바로 SSL을 적용하는 경우가 대부분이기 때문이다.
Industry의 특성 상 보안을 요구하는 것도 있지만, 최근에는 SSL을 적용하지 않으면 위험 표시가 뜨는 등 웹 환경 자체가 이러한 사항들을 요구하는 측면도 있다.
SSL이 적용된 http를 https 로 부르는 것처럼,
SSL이 적용된 websocket은 보통 wss 로 부른다.
원래 SSL을 적용하려면, CA를 통해 certificate를 발급받는 것이 원칙이다.
하지만 현재 프로젝트에서는 그렇게 할 수 있는 환경이 아니므로, certbot
을 사용해서 무료 SSL 인증서를 발급받고 turn 서버에 적용한다.
이를 위해선 아래 2가지 사항이 필요하다.
.com
등의 주소가 좋긴 하나, 유료이고 현재 단계에선 유료를 사용할 필요는 없으므로 .tk
적용 certbot
를 사용하려면 우선 설치를 해야 한다.
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install certbot
그런데 설치에서 또 에러 발생.
워낙 많은 에러가 발생해서, 순서대로 정리할 수는 없고 주요 에러를 나열했다.
1) gpg keyring error: gpg 파일이 오염된 것으로, 해당 파일 삭제
: 해당 질문 참고했다
: 추가 참고 페이지
: launchpad-getkeys는 설치하지 않음 (gpg key를 자동으로 import 해줌)
2) 더 적합한 certbot
설치 방법
: 계속 오류가 나서, 좀 더 찾아보니 ubuntu 20버전은 아래와 같이 설치하는 것이 권장된다는 것을 확인했다
: 해당 링크
sudo apt install certbot python3-certbot-nginx
참고로, ubuntu 버전은 아래와 같이 입력하면 된다.
#1번 방법
cat /etc/*release
#2번 방법
lsb -release -a
3) sudo apt update 시 계속 ppa list관련 에러 발생
: 해당 ppa list 삭제하면 된다
: 제거 명령어는 구글링
sudo rm -i /etc/apt/sources.list.d/PPA_Name.list
certbot
문서에 따르면, 인증 제공 방식에 여러 옵션이 있다.
이 중 가장 많이 사용되는 방식은 --standalone
으로 판단되어 아래와 같이 작성!
certbot
이 Let's encrpyt
서버가 요청한 도메인 인증을 직접 처리한다sudo certbot certonly --standalone --preferred-challenges http \
#option: 자동 certificate 갱신
--deploy-hook "systemctl restart coturn" \
#필수 작성 사항, 사전 셋팅에서 설정한 도메인명을 넣는다
-d <YOUR_DOMAIN>
인증을 받을 동안에는 80
을 열어둬야 하므로, 모든 서버를 닫는다.
#서버 연결 중단하기 (중단하지 않으면 포트넘버 80에 nginx가 listening됨)
sudo service nginx stop
sudo service coturn stop
#stop인지 active인지 확인하기
sudo service nginx status
sudo service coturn status
에러가 뜬다면 처음 turn서버 설치 시 turnserver.conf
에서 domain name/realm 등의 정보가 내가 추가한 도메인명과 일치하는지 더블 체크.
이제 turn 서버에 인증서를 등록하면 된다.
#/etc/nginx/sites-available/default로 이동
sudo vi default
#default 파일 수정 (80도 -> 443으로 redirect)
server {
listen 80;
listen [::]:80;
return 301 https://<DOMAIN>$request_uri;
}
server {
listen 443;
ssl on;
ssl_certificate /etc/letsencrypt/live/<DOMAIN>/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/<DOMAIN>/privkey.pem;
}
마지막으로 turnserver.conf
에 가서 아래 내용을 추가해준다.
# SSL certificates
cert=/etc/letsencrypt/live/<DOMAIN>/fullchain.pem
pkey=/etc/letsencrypt/live/<DOMAIN>/privkey.pem
# 443 for TURN over TLS, which can bypass firewalls
tls-listening-port=443
SSL 적용 전, nginx start
한 캡처 이미지다.
만약 에러가 계속 난다면, 역시 마찬가지로 아래 내용들을 다시 살펴보는 것이 좋다.
turnserver.conf
내용 (EC2 IP주소, 도메인명 등) 참고 자료
ws, wss (주소가 너무 길어 링크 처리함)
https://gabrieltanner.org/blog/turn-server
https://velog.io/@moonyoung/HTTPS-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0
https://hue9010.github.io/aws/nginx%EB%A5%BC-%EC%A0%81%EC%9A%A9%ED%95%B4-%EB%B3%B4%EC%9E%90/