잠시만 기다려 주세요

HOME   |  여기는?   |  바다물때표   |  여러가지 팁 (888)  |  추천 및 재미 (153)  |  자료실 (20)  |  끄적거림 (520)  |  시나리오 (760)  |  드라마 대본 (248)  |  

2020년 09월 24일
입을 닫아라. 말이 많은 곳에는 폭력과 다툼과 언쟁만이 있을 뿐이다. - 바다아이
 




    리눅스 서버

리눅스 서버 - centos Let's Encrypt - 무료 SSL 인증서 발급받기, certbot 설치
이 름 : 바다아이   |   조회수 : 2299         짧은 주소 : 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/
| |


      1 page / 5 page
번 호 카테고리 제 목 이름 조회수
136 리눅스 서버 ... ntp .. ... 바다아이 216
135 리눅스 서버 archlinux netstat , netstat ... 바다아이 275
134 리눅스 서버 ps , ps option 바다아이 284
133 리눅스 서버 , swap , ... swap . 바다아이 264
132 리눅스 서버 crontab , .... 바다아이 241
131 리눅스 서버 ssh , ssh 바다아이 503
130 리눅스 서버 SSH SSH , ssh-keygen rsa 바다아이 487
129 리눅스 서버 , date : () , () , 바다아이 787
128 리눅스 서버 aws lightsail, ssh .. .pem 바다아이 852
127 리눅스 서버 , ubuntu generic kernel 바다아이 1278
126 리눅스 서버 .. apt ... 바다아이 1223
125 리눅스 서버 ... ubuntu kernel compile 바다아이 1471
124 리눅스 서버 nginx http2 , . 바다아이 1302
123 리눅스 서버 psql libreadline.so.7: cannot open shared object file: No such file or directory 바다아이 1732
122 리눅스 서버 ssh .bashrc , bash .. .bash_profile 바다아이 1643
121 리눅스 서버 , , 바다아이 1655
120 리눅스 서버 rc.local ... , 바다아이 1707
119 리눅스 서버 ? - IPv4 Subnetting, (Subnet Mask) 바다아이 1785
118 리눅스 서버 TCP UDP ? 바다아이 1739
117 리눅스 서버 FTP passive(), active() 바다아이 1659
116 리눅스 서버 ftp passive .... filezilla ftp ... 바다아이 2270
115 리눅스 서버 ssh sftp ... sftp ... 바다아이 1847
114 리눅스 서버 rpm 바다아이 1908
113 리눅스 서버 /tmp ... /tmp ... tmpfs 바다아이 2440
112 리눅스 서버 archlinux ... mirror, 바다아이 1826
111 리눅스 서버 centos7 pgadmin4 .... ... pgadmin4 server mode, postgresql admin .. 바다아이 1896
110 리눅스 서버 centos 7, freebsd postfix dovecot , 바다아이 2015
109 리눅스 서버 Centos 7 Postgresql 10, 11 바다아이 1846
108 리눅스 서버 [Network] SSL / TLS 바다아이 2151
107 리눅스 서버 TLS , ssl 바다아이 2617
| |








Copyright ⓒ 2001.12. bada-ie.com. All rights reserved.
이 사이트는 리눅스에서 firefox 기준으로 작성되었습니다. 기타 브라우저에서는 다르게 보일 수 있습니다.
[ FreeBSD + GoLang + PostgreSQL ]
서버위치 : vultr.com 서울  실행시간 : 0.0439
to webmaster... gogo sea. gogo sea.