이렇게 워드프레스 설치까지 진행했는데 그대로 사용하게 되면 보안에 취약하다.
그래서 이번에는 Nginx 웹서버에 SSL를 적용해보도록하겠다.
요것도 마찬가지로 똑같은 Cent OS이기 떄문에 이걸보면 어느정도 이해도 되고 해결도 될거다.
wget https://dl.eff.org/certbot-auto
mv certbot-auto /usr/local/bin/certbot-auto
chown root /usr/local/bin/certbot-auto
chmod 0755 /usr/local/bin/certbot-auto
그리고 인증받을 서버의 주소와 nginx web servername을 일치시켜주자.
그리고 나서 service nginx restart
sudo /usr/local/bin/certbot-auto certonly -d 'dalso.duckdns.org'
위 명령어를 입력하게되면 인증서 발급을 위한 패키지도 설치되게 된다.
그리고 설치가 완료되면 바로 인증서 발급, 발급은 nginx 버전
동의도 해주고 이메일도 입력해주고
모든과정을 완료하면 Congratulations! 과함께 인증서 발급이 완료된다.
중간의 경로에 인증키가 들어있는데 경로를 기억해두고 인증서에 사용될 암호키를 생성해보자.
암호키 생성은 openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
명령어로 하면된다.4096이 보안은 더 뛰어난데 오래걸림;
자 이제 정리해보면
생성한 SSL 인증서의 위치는 /etc/letsencrypt/live/도메인명/fullcahin.pem, /etc/letsencrypt/live/도메인명/ privkey.pem
암호키는 /etc/ssl/certs/dhparam.pem
에 위치한다.
이걸 nginx의 도메인에 넣으면 된다.
vi /etc/nginx/conf.d/default.conf
새로운 443포트의 서버를 만들어주자. (기존 80도 유지해야함)
server {
listen 443 ssl http2;
listen [::]:443 http2;
server_name 도메인 이름;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
ssl on;
ssl_certificate /etc/letsencrypt/live/도메인 이름/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/도메인 이름/privkey.pem;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 1440m;
ssl_buffer_size 8k;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'kEECDH+ECDSA+AES128 kEECDH+ECDSA+AES256 kEECDH+AES128 kEECDH+AES256 kEDH+AES128 kEDH+AES256 DES-CBC3-SHA +SHA !aNULL !eNULL !LOW !kECDH !DSS !MD5 !EXP !PSK !SRP !CAMELLIA !SEED';
ssl_prefer_server_ciphers on;
ssl_trusted_certificate /etc/letsencrypt/live/도메인 이름/chain.pem;
ssl_stapling on;
ssl_stapling_verify on;
access_log /var/log/nginx/web.access.log main;
error_log /var/log/nginx/web.error.log;
location / {
try_files $uri $uri/ /index.php?$args;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/html;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_cache off;
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/var/run/php-fpm/www.sock;
include mime.types;
}
location ~ /\.ht {
deny all;
}
}
작성하고 service nginx restart
후 netstat -lntp
로 열려있나 확인하자
HTTPS 방화벽 오픈
http와 마찬가지로 https도 방화벽을 오픈해야 외부에서 접속할 수있다.
firewall-cmd --zone=public --permanent --add-port=443/tcp
firewall-cmd --reload
서버에서 오픈완료했으니 GCP에서도 방화벽 설정을 해주자.
관리콘솔 > VPC 네트워크 > 방화벽 규칙 > 방화벽 규칙만들기(https 추가)
SSL 확인하기(http확인)
웹으로 https://dalso.duckdns.org로 접근해보면 인증서가 되어있는걸 확인할 수있다.
pi@pi-IdeaPad-L340-15IRH-Gaming:~$ wget https://dl.eff.org/certbot-auto
–2021-07-19 11:19:10– https://dl.eff.org/certbot-auto
dl.eff.org (dl.eff.org)을(를) 해석하는 중… 151.101.76.201, 2a04:4e42:12::201
접속 dl.eff.org (dl.eff.org)|151.101.76.201|:443… 접속됨.
HTTP 요청을 전송했습니다. 응답을 기다리는 중입니다… 404 Not Found
2021-07-19 11:19:11 오류 404: Not Found.
wget https://dl.eff.org/certbot-auto 를 입력하니까 404 에러가 뜹니다…
좀 기다리면 될까요?
방화벽 문제인거같습니다