리눅스 서버 - centos Let's Encrypt - 무료 SSL 인증서 발급받기, certbot 설치
이 름 : 바다아이
|
조회수 : 9079
짧은 주소 : https://www.bada-ie.com/su/?131591788041
“I’m using (Software) on (System)”을 시스템에 맞게 선택 하면은 설치 방법을 알려줍니다.
저는 위에 적힌 서버 환경대로 Software에서 Nginx를 선택 하고 System에서 CentOS/RHEL 7를 선택하였습니다.
주의
설치하기에 앞서 반듯이 EPEL repository가 활성화 되어 있어야 합니다.
만약 설치 하지 않았다면, sudo yum install epel-release로 설치하면 됩니다.
Certbot을 설치합니다.
$ sudo yum install certbot
인증서를 생성하는 방법은 다음과 같습니다.
$ sudo certbot certonly --standalone -d www.example.com주의
Certbot이 인증을 하면서 443 포트를 사용합니다. (80 포트를 사용할 수도 있습니다.) 그래서 443 포트를 열어주어야 합니다.
$ sudo firewall-cmd --permanent--add-service=https
$ sudo firewall-cmd --reload주의
만약 Nginx 또는 다른 어떤 프로그램이 443 포트가 사용중이라면, 다음과 같은 에러를 볼 수 있습니다.
$ sudo certbot certonly --standalone -d www.example.com
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org
Obtaining a new certificate
Performing the following challenges:
tls-sni-01 challenge for www.example.com
-------------------------------------------------------------------------------
Could not bind TCP port 443 because it is already in use by another process on
this system (such as a web server). Please stop the program in question and then
try again.
-------------------------------------------------------------------------------(R)etry/(C)ancel:
443포트를 비워두고 Retry 또는 다시 명령어를 실행하면 됩니다.
nginx를 사용할 경우 다음과 같이 hook를 이용할 수 있습니다.
$ sudo certbot certonly --standalone -d gz.us.to --pre-hook"systemctl stop nginx"--post-hook"systemctl start nginx"Nginx configuration
Nginx에 위에서 발급받은 SSL 인증서를 설정합니다.
$ sudo vi /etc/nginx/nginx.conf
server {
listen 443 ssl;
server_name www.example.com;
ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem;
location / {
...
}
}
설정 정보를 적용합니다.
$ sudo systemctl reload nginx
아무런 메시지 없이 프롬프트로 떨어졌다면, 정상적으로 설정이 적용된 것입니다.
Proxy
API서버를 따로 두었을 경우 proxy를 이용하여 요청정보를 넘길 수 있습니다.
$ sudo vi /etc/nginx/nginx.conf
server {
...
location /api {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://localhost:3000/api;
proxy_redirect off;
}
}
이제 /api로 호출되는 모든 요청은 내부서버로 넘어가게 됩니다.
Renewing certificates
Let’s Encrypt로 발급받은 SSL 인증서는 유효기간이 90일 입니다.
그리고 재발급이 가능한 기간은 60일 이후 부터입니다.
먼저 --dry-run 옵션으로 재발급이 가능한지 테스트를 할 수 있습니다.
$ sudo certbot renew --dry-run...
Congratulations, all renewals succeeded. The following certs have been renewed:
/etc/letsencrypt/live/www.example.com/fullchain.pem(success)
위와 같이 success가 나온다면 60일 이후 certbot renew 명령으로 재발급을 받을 수 있습니다.
여기서도 문제가 발생할 수 있습니다.
처음에 인증서를 발급하면서 hook을 이용하지 않으셧을 경우 nginx가 켜져 있으면,
위에서 발생했던 443 포트 문제가 다시 발생하게 됩니다.
그럴 경우 renewal파일에 hook을 추가해줍니다.
$ sudo vi /etc/letsencrypt/renewal/www.example.com.conf...# Options used in the renewal process
[renewalparams]
pre_hook = systemctl stop nginx
post_hook = systemctl start nginx
...
다시 명령어를 실행하면 성공으로 떨어지는 것을 확인할 수 있을 것입니다.
Crontab
Linux의 스케줄러인 Crontab에 등록해서 3달에 한번씩 자동 갱신하도록 작업을 추가합니다.
$ sudo crontab -e
0 4 1 */3 * certbot renew
1월, 4월, 7월, 10월 1일 4시 0분에 위 명령어가 실행됩니다.
Conclusion
정보가 중요한 시대인 만큼 보안은 필수입니다.
SSL을 적용함으로 써 속도가 느려지는 부분도 존재하지만, 그 부분은 매우 미미하다고 생각합니다.
옛날에는 SSL인증서 발급이 비싸서 주로 개인서명(Self Signed)를 많이 사용했지만,
고맙게도 이렇게 무료로 인증서를 발급해주니 꼭 서버에 적용해서 안전한 서비스를 제공하시기 바랍니다.
출처 : https://gongzza.github.io/linux/install/install-letsencrypt-nginx/
|
|
번 호
카테고리
제 목
이름
조회수
Copyright ⓒ 2001.12. bada-ie.com. All rights reserved.
이 사이트는 리눅스에서 firefox 기준으로 작성되었습니다. 기타 브라우저에서는 다르게 보일 수 있습니다.
[ Ubuntu + GoLang + PostgreSQL + Mariadb ]
서버위치 : 오라클 클라우드 춘천 실행시간 : 0.0559 초 to webmaster... gogo sea. gogo sea.