사이드 프로젝트로 어플 개발하면서 ssl인증서를 설치했었는데 무료 적용 기간이 90일이라 곧 만료가 된다는 메일을 받아서 갱신을 해야한다.
ssl은 http프로토콜의 보안성을 높이기 위한 인증서이다. http프로토콜은 서버와 클라이언트의 통신과정에서 데이터를 암호화하지 않고 전송하기 때문에 보안에 취약하다. 따라서 ssl이 적용된 https프로토콜을 이용하는 것이 바람직하다.
그래서 SSL은 서버와 클라이언트의 통신을 안전하다고 보증해주는 문서라고 할 수 있다.
현재 상황
Ubuntu에 nginx를 띄워 사용중
80포트(http) -> 443포트(https) -> 8080포트 (Spring boot)
ZeroSSL에 들어가 New Certificate를 클릭한 후 도메인을 입력한다.
silencesoft.me(내 도메인)을 입력하면 자동으로 오른쪽에 두 개의 도메인이 생성되는데 나는 www.silencesoft.me는 구입하지 않았으므로 삭제한 상태이다.
Next Step에서 90days Certificate을 선택하고
Auto-generate CSR을 선택한다.
그리고 무료 플랜을 선택한다.
도메인을 검증하는 방법은 3가지가 있는데 이 중 Http File Upload방식을 사용할 것이다.
위에서 하라는 대로 진행하면 된다!
Auth File을 다운받는다.
서버에 /.well-known/pki-validation 폴더를 만든다.
(위치는 상관없는 것으로 알고 있다. 나는 /var/www/silencesoft.me 폴더 아래에 만들었다. 자신이 정해준 위치를 이따 nginx 설정파일의 root로 지정하면 된다)
위에서 만든 pki-validation폴더 안에 Auth file을 저장한다. (직접 vi로 편집해도 되고 FileZilla같은 FTP를 이용해도 된다.)
3-1. nginx 설정 파일을 수정한다. 나는 /etc/nginx/conf.d/default.conf를 수정하였다.
아래 내용을 추가하자
server {
#위에서 설정한 루트경로를 입력!
root /var/www/silencesoft.me;
index index.html index.htm index.nginx-debian.html;
#내 도메인 이름
server_name silencesoft.me;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_redirect off;
proxy_set_header X-NginX-Proxy true;
proxy_connect_timeout 300s;
proxy_read_timeout 600s;
proxy_send_timeout 600s;
proxy_buffers 4 256k;
proxy_buffer_size 128k;
}
#추가
location ~/.well-known/pki-validation {
default_type "text/plain";
index AuthFile.txt; #다운 받은 auth file이름을 적으면 된다
}
}
server {
listen 80;
server_name silencesoft.me;
}
}
인증서가 생성되면 zip파일 안에 3개의 파일이 있다.
certificate.crt
: This file contains your primary SSL certificate, ready to be installed on your server.
private.key
: This file contains your private key, which will need to be uploaded to your server as well.
ca_bundle.crt
:This file contains only one intermediate certificate (ZeroSSL CA). The root certificate that signs this immediate certificate is trusted by all browsers and almost all other SSL clients. If you need the full chain including the root certificate we recommend you use a tool like whatsmychaincert.com to download it.
이 파일들을 서버의 원하는 위치에 놓고 이 중 certificate.crt와 bundle을 하나로 합쳐준다. 나는 /home/ubuntu/ssl아래에 저장했다. 역시 위치는 상관없고 아래 엔진엑스 설정파일에 명시하면 된다.
$ cat certificate.crt ca_bundle.crt >> certificate.crt
그리고 nginx 설정파일을 수정한다.
server {
#443포트 활성화, 인증서 위치 추가
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
ssl_certificate /home/ubuntu/ssl/certificate.crt;
ssl_certificate_key /home/ubuntu/ssl/private.key;
root /var/www/silencesoft.me;
index index.html index.htm index.nginx-debian.html;
server_name silencesoft.me;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_redirect off;
proxy_set_header X-NginX-Proxy true;
proxy_connect_timeout 300s;
proxy_read_timeout 600s;
proxy_send_timeout 600s;
proxy_buffers 4 256k;
proxy_buffer_size 128k;
}
location ~/.well-known/pki-validation {
default_type "text/plain";
index AuthFile.txt;
}
}
server {
listen 80;
server_name www.silencesoft.me silencesoft.me;
# 80포트로 들어온 요청은 443으로 리다이렉트
return 301 https://$host$request_uri;
}
그리고 nginx를 재시작한다. sudo service nginx restart
자물쇠가 걸려있으면 성공ㅎㅎ