
전 ssl이 어렵습니다 (진지하게정말로너짜증나). 수많은 블로그들이 잘만 해낸 것들을 보면서 나는 왜 안되지 오만가지 생각이 들지만, 그럼에도 쿠키 테스트 + 여러 이유로 ssl 적용이 꼭 필요합니다.
회사 컴으로 Windows 환경에서 nginx 설치하고 로컬에서 https 적용을 성공한 후기입니다.
개인적으로 lets' encrypt보다 zerossl이 더 쉬웠습니다. 패스트코밋 상담원과도 진솔한(?!) 대화도 나눠보고 호스팅케이알에 진솔한(??) 문의 편지도 남기고.... 결제도 했다 취소해보고 온갖 ⛏삽질과 블로그 수소문을 하고 다녔죠.
zerossl은 9개월까지만 무료 지원한다고 단점이라고 적혀있지만 오래 운영할 것이라면 달에 10달러를 그냥 주자고 마음먹었습니다. (ssl에 1n일을 날렸거든요.)
플로우를 파악하는게 중요한 것 같습니다.

저는 호스팅케이알 사이트에서 jinvicky.shop이라는 도메인을 구입했고, DDNS와 포트포워딩 설정을 했습니다.
가장 최근에 http://www.jinvicky.shop으로 접근에 성공했습니다.
먼저 사이트에 들어가서 회원가입을 해주세요
개인적으로 이 블로그가 정리를 잘한 것 같습니다.
💗https://gruuuuu.github.io/network/openssl/💗

CNAME 타입으로 도메인 레코드를 아래처럼 추가했습니다.

ZeroSSL에서 받은 Name은 도메인 레코드의 호스트 이름입니다.
🚨꼭 Name에서 내 도메인 이름은 제외해야 합니다.
맨 뒤에 붙은.jinvicky.shop을 제거한 값을 넣습니다.
값은 통째로 붙여넣기 해줍니다.
원래 www.jinvicky.shop으로 할려고 했는데
(https://devjh.tistory.com/357) 에서 ZeroSSL은 서브도메인 사용이 안된다는데? 이야기를 듣고 리스크 줄이고자 그냥 jinivcky.shop으로 해봤습니다.
호스팅케이알의 경우 적용이 빨랐습니다. 만약 인증에 실패했다면 값에 오류가 있을 확률이 높습니다.
인증에 성공하면 웹서버를 고르고 인증서 zip을 다운받습니다. 저는 Nginx를 선택했습니다.
공식 문서(https://help.zerossl.com/hc/en-us/articles/360058295894-Installing-SSL-Certificate-on-NGINX)에서 nginx.conf에 적용하기 전에 인증서 파일 내용을 합쳐야 한다고 합니다.

메모장으로 켜서 ca_bundle.crt 내용을 복사해서 certificate.crt 맨 끝에 붙여넣으면 됩니다.

--END CERTIFICATE ---- 가 이전 파일 내용 끝이고 밑에가 붙여넣은 내용입니다. 그럼 이제 certificate.crt가 완성되었습니다.
🤔 이해가 안 가지만 mac mini에서 구글링한대로
cat명령어를 사용했다가 그 GB가 소모되고 out of disk 에러가 난 경험이 있습니다;; (왜인지 아직도 이해 못했음. 맥미니 새거였다고;;)
Windows용 nginx를 사전에 설치합니다. nginx 명령어는 아래 블로그 정도로 충분합니다.
👉 https://it.gwangtori.com/19
여러 블로그를 참고해가면서 짜집기를 했습니다.
어느 블로그는 pki-validation이 가장 중요하다고도 하고 저기는 또 다르고 그랬지만 최대한 구성해봤습니다.
nginx.conf
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name jinvicky.shop;
location / {
root html;
index index.html index.htm;
}
location ~^/.well-known/pki-validation {
allow all;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
server {
listen 443 ssl;
server_name jinvicky.shop;
ssl_certificate C:/Users/jinvi/Downloads/jinvicky.shop/certificate.crt;
ssl_certificate_key C:/Users/jinvi/Downloads/jinvicky.shop/private.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
}
}
두근거리는 마음으로 테스트해보는데... http://localhost 접속밖에 안됩니다(욕) https://는 빗금 쳐진 채로 무시되고.... 그러다가 오전에 검색해봤던 Mac mini local https에 관해 검색했던 게 생각나서 Windows에서 테스트삼아 호스트 변경을 했습니다.
보통 로컬에서 HTTPS 테스트 환경이 필요하신 분들이 많이 사용하는 방식입니다.
👉 https://likedev.tistory.com/entry/윈도우-PC에서-Hosts-파일-설정-방법
메모장을 관리자 실행해서 아래와 같이 로컬 포트와 도메인명을 등록해줍니다.


윈도우 호스트 적용을 해야 https://가 성공적으로 적용됩니다. 당연히 핫스팟 킨 외부 접속에는 도메인을 못 찾는다고 뜨지만
🔥그렇다는건
127.0.0.1과jinvicky.shop이 연결이 안되었듯이 도메인 레코드에 원인이 숨겨져 있을 가능성이 있다
라는 힌트 하나라도 얻었습니다. 기존의 DDNS를 의심해보러 갑니다.
📃 https://velog.io/@pjj186/docker-compose-에서-nginx-zeroSSL-인증서-발급받고-적용하기
127.0.0.1 www.jinvicky.shop으로 호스트를 변경했더니 www.jinvicky.shop으로도 로컬 https 접속할 수 있었다.
그러면 zerossl도 서브 도메인을 지원하는 것이 아닌가...? 생각한다.