Certbot을 사용하여 Apache 또는 Nginx용 Let’s Encrypt SSL 인증서를 얻는 방법

이제 SSL은 SEO (Search Engine Optimization) 신호 중 하나입니다. Google 웹마스터 블로그에서 읽어보세요.

웹사이트가 한두 개뿐이라면 큰 문제가 없습니다. 가장 저렴한 SSL 비용은 연간 약 4-5 USD에 불과합니다.

그러나 100 개의 도메인이 있고 여러 하위 도메인이 필요하다고 상상해보십시오. 연간 약 20 달러의 비용이 드는 SAN 도메인과 연간 약 40 달러의 와일드 카드 도메인이 필요합니다.

예 1 도메인에는 5 개의 하위 도메인이 필요하고 www가 제외되므로 SAN SSL의 경우 2,000 USD, 와일드 카드 SSL의 경우 4000 USD의 비용이 듭니다.

Let’s Encrypt의 무료 솔루션이 있습니다.

Let’s Encrypt는 공공의 이익을 위해 운영되는 무료 자동화 개방형 인증 기관(CA)입니다. ISRG(Internet Security Research Group)에서 제공하는 서비스입니다.

Let’s Encrypt SSL은 3개월 동안 유효하며 만료되기 약 1개월 전에 갱신할 수 있습니다.

Centos 7 및 8에서 Let’s Encrypt를 생성하는 방법

Let’s Encrypt SSL을 생성하려면 certbot binyary가 필요합니다.

기본적으로 Certbot 패키지는 Centos/RHEL 패키지 관리자에서 사용할 수 없습니다.

Certbot을 설치하려면 EPEL 리포지토리를 활성화해야 합니다.

For CentOS/RHEL 7 Only
# yum install epel-release

위의 명령이 작동하지 않거나 CentOS 6 / RHEL 6을 사용하여 수동으로 설치할 수 있습니다.

For CentOS/RHEL 7
# yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
 
For CentOS/RHEL 6
# yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm

다음 명령을 사용하여 Certbot를 설치합니다.

# yum install certbot

Let’s Encrypt 인증서 얻기

Nginx에서 Let’s Encrypt Certificate를 사용합니다.

Nginx 또는 Apache용 SSL을 생성할 때 독립형으로 사용합니다. 이 명령은 포트 80에서 실행되는 Nginx 또는 Apache 서비스를 중지하지 않고도 작동합니다.

# certbot certonly -a webroot --webroot-path=/home/serverdiary/public_html --renew-by-default --email [email protected] --agree-tos -d serverdiary.com -d www.serverdiary.com -d img.serverdiary.com

예제 출력 :

# certbot certonly -a webroot --webroot-path=/home/serverdiary/public_html --renew-by-default --email [email protected] --agree-tos -d serverdiary.com -d www.serverdiary.com
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator webroot, Installer None
........................

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/serverdiary.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/serverdiary.com/privkey.pem
   Your cert will expire on 2020-12-04. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

이제 SSL 인증서 체인이 /etc/letsencrypt/live/serverdiary.com/fullchain.pem 및 키 파일 /etc/letsencrypt/live/serverdiary.com/privkey.pem에 저장됨

샘플 Nginx 구성 :

server {
	listen       80;
	server_name  serverdiary.com;
	
	root   /home/serverdiary/public_html;
	index  index.php index.html index.htm;
	
	location / {
		return 301 https://serverdiary.com$request_uri;
	}
}
server {
	listen       80;
	server_name  www.serverdiary.com;
	
	root   /home/serverdiary/public_html;
	index  index.php index.html index.htm;
	
	location / {
		return 301 https://serverdiary.com$request_uri;
	}
}
server {
	listen  213.133.110.88:443 ssl http2;
	server_name www.serverdiary.com;
	
	root   /home/serverdiary/public_html;
	index  index.php index.html index.htm;

	access_log off;
	ssl_certificate    		/etc/letsencrypt/live/serverdiary.com/fullchain.pem;
	ssl_certificate_key		/etc/letsencrypt/live/serverdiary.com/privkey.pem;
	
	ssl_session_cache  builtin:1000  shared:SSL:10m;
    #enables all versions of TLS, but not SSLv2 or 3 which are weak and now deprecated.
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
    ssl_prefer_server_ciphers on;
	ssl_session_timeout 1d;
	ssl_session_cache shared:SSL:10m;
	add_header Strict-Transport-Security max-age=6048000;
	
	location / {
		return 301 https://serverdiary.com$request_uri;
	}
}
	
server {
	listen  213.133.110.88:443 ssl http2;
	server_name serverdiary.com;
	
	root   /home/serverdiary/public_html;
	index  index.php index.html index.htm;

	gzip	on;
	ssl_certificate    		/etc/letsencrypt/live/serverdiary.com/fullchain.pem;
	ssl_certificate_key		/etc/letsencrypt/live/serverdiary.com/privkey.pem;
	
	#enables all versions of TLS, but not SSLv2 or 3 which are weak and now deprecated.
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
    ssl_prefer_server_ciphers on;
	ssl_session_timeout 1d;
	ssl_session_cache shared:SSL:10m;
	add_header Strict-Transport-Security max-age=6048000;
	
	access_log /var/log/nginx/serverdiary.com.ssl.access.log;
	error_log /var/log/nginx/serverdiary.com.ssl.error.log;
	
	location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|pdf|txt|tar|wav|bmp|rtf|js|flv|swf|htm|eot|woff|woff2|ttf|svg|otf)$ {
		add_header Cache-Control "public";
		expires 60d;
		log_not_found off;
		access_log off;
	}
	location ~ /.well-known {
		allow all;
	}
	
	...........
	...........
}

연관된 글 :자동 갱신 Systemd를 사용하여 SSL 인증서를 암호화하고 성공하면 Nginx / Apache를 다시 시작합시다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다