WEB & WAS/Apache

무료인증서 (letsencrypt, buypass)

서버엔지니어 2023. 3. 8.
728x90

무료 인증서 사용조건

1. 무료인증서 사용할 수 있는 OS서버 조건, 지원기간되는 OS

(CentOS 7, 8 Ubuntu 18,20,22) / CentOS 6, Ubuntu 16 지원만료

2. 해외망차단이 되어 있으면 안됨.

 

Let's encrypt 인증서는 90일 인증기간과 61일부터 90일까지 갱신할 수 있습니다. 그렇기 때문에 31일이 있는 달들이 연속으로 있거나 문제가 생겨 일수가 부족하여 갱신이 잘 안되는 경우가 있습니다. crontab -e 나 /etc/crontab 에 등록했을때 발급 및 갱신할때 15일 간격기준으로 설정해주세요. 

 

인증서 관련 모듈​ 조건

Redhat 계열 apachectl -M | grep ssl 했을때 ssl 모듈이 있어야함 (환경변수를 설정했다면 소스도 저렇게 입력하면 됨)

​Debian 계열 apache2ctl -M | grep ssl 

Redhat은 소스설치할때 컴파일옵션에서 --enable-ssl 옵션이 들어가서 설치가 되어야함.

또한 httpd.conf에 Load 어쩌고를 주석처리 풀고 ssl.conf 관련 부분도 주석처리 해제

apahce 2.4는 httpd.conf

LoadModule socache_shmcb_module modules/mod_socache_shmcb.so

LoadModule socache_dbm_module modules/mod_socache_dbm.so

LoadModule ssl_module modules/mod_ssl.so

apache 2.2는 httpd.conf

LoadModule ssl_module modules/mod_ssl.so

이것만 on 되어 있으면 됩니다.

​3개의 모듈이 on 되어야 합니다.

# /usr/local/apache/bin/apachectl -M | grep -E 'ssl|socache' 

socache_shmcb_module (shared)

socache_dbm_module (shared)

ssl_module (shared)

만약 mod_ssl 이 소스 apache 컴파일 설치할때 --enable-ssl 없다면 재설치를 해야합니다.

Certbot 설치

# yum install -y certbot certbot-apache certbot-nginx mod_ssl  // Redhat

# apt-get install certbot certbot-apache certbot-nginx mod_ssl  // Debian

 

 

무료 인증서 자동 갱신 설정 (crontab)

(%%주의!! 발급받은 날이 29~31일이다. 그러면 28일로 설정해주세요.%%)

Let's encrypt는 90일이기 때문에 1달마다 적용한다면, 31일로 되는 달에는 결국 날짜가 부족해서 1일~2일로 인증이 안됩니다.

그렇기 때문에 15일 간격으로 설정을 한다면 제대로 인증이 되는겁니다.

예를들어, 5일에 발급받았다.

 

* letsencrypt 인증서

 

ex)

# crontab -e

30 4 5,20 * * certbot renew

30 4 5,20 * * /etc/init.d/apachectl graceful (소스설치경우)

30 4 5,20 * * systemctl reload httpd (패키지 설치)

ex)

# vi /etc/crontab

30 4 5,20 * * root certbot renew

30 4 5,20 * * root /etc/init.d/apachectl graceful (소스설치경우)

30 4 5,20 * * root systemctl reload httpd (패키지 설치)

* buypass 인증서 180일 6개월인증기간, 121일부터 180일까지 갱신가능합니다.

buypass 인증서에서 주의점. 퓨니코드 도메인(한글도메인)은 발급이 되지않는것 같습니다.

buypass인증서로 적용했을때 crontab 설정을 한달마다 기준으로 권유드립니다.

ex)

# crontab -e

30 4 16 * * certbot renew

30 4 16 * * /etc/init.d/apachectl graceful (소스설치경우)

30 4 16 * * systemctl reload httpd (패키지 설치)

 

ex)​

# vi /etc/crontab

30 4 16 * * root certbot renew

30 4 16 * * root /etc/init.d/apachectl graceful (소스설치경우)

30 4 16 * * root systemctl reload httpd (패키지 설치)

certbot 발급 방식

 

1. Webroot 방식 (--webroot)

2. Standalone 방식 (--standalone)

3. 웹서버 방식 (apache, nginx) (--apache, --nginx)

4. DNS 방식 (--manual)

 

Webroot 방식

​webroot 방식은 인증서를 발급 및 만료 갱신을 할때 nslookup으로 발급 받고자하는 웹서버로 질의가 된다면 80 tcp 포트로 운영되는 웹서비스에서 도메인과 웹루트 디렉토리가 일치하는지 확인 작업한 뒤 일치하면 발급해주는 구조 입니다.

 

장점 : 80 tcp 포트로 운영되는 웹서비스를 중단시킬 필요가 없습니다.

단점 : 인증 명령에 기재된 하나의 도메인 인증서만 발급 가능

 

# certbot certonly --webroot --agree-tos -m [서버관리자이메일] -w [웹루트 디렉토리 위치] -d [도메인 1] -d [도메인 2(보통 www.원도메인)] -d [도메인 3] --rsa-key-size 4096

인증서 받을 때 180일 buypass인증서 받는 명령어

# certbot certonly --webroot --agree-tos --server https://api.buypass.com/acme/directory -m [서버관리자이메일] -w [웹루트 디렉토리 위치] -d [도메인 1] -d [도메인 2(보통 www.원도메인)] -d [도메인 3] --rsa-key-size 4096

privkey.pem = key파일

cert.pem = 인증서 파일

chain.pem = 인증서 발급자 파일

fullchain.pem = cert.pem + chain.pem 하나로 합친파일

ssl.conf 설정

​==================================================================================

<VirtualHost *:443>

ServerAdmin [관리자 이메일]

DocumentRoot "[웹루트 디렉토리 위치]"

ServerName "[원도메인]"

ServerAlias "[www.원도메인]" "[다른서브도메인]"

ErrorLog "/usr/local/apache/logs/ssl_원도메인-error_log" #(소스설치일때)

TransferLog "/usr/local/apache/logs/ssl_원도메인-access_log" #(소스설치일때)

#ErrorLog "/var/log/httpd/ssl_원도메인-error_log" #(패키지설치일때)

#TransferLog "/var/log/httpd/ssl_원도메인-access_log" #(패키지설치일때)

SSLEngine on

SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL

SSLCertificateKeyFile /etc/letsencrypt/live/도메인/privkey.pem

SSLCertificateFile /etc/letsencrypt/live/도메인/cert.pem

SSLCertificateChainFile /etc/letsencrypt/live/도메인/fullchain.pem # 또는 fullchain.pem 대신 chain.pem 으로 써도 된다.

<FilesMatch "\.(cgi|shtml|phtml|php)$">

SSLOptions +StdEnvVars

</FilesMatch>

<Directory "/usr/local/apache/cgi-bin">

SSLOptions +StdEnvVars

</Directory>

BrowserMatch ".*MSIE.*" \

nokeepalive ssl-unclean-shutdown \

downgrade-1.0 force-response-1.0

CustomLog "/usr/local/apache/logs/ssl_request_log" \

"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

</VirtualHost>

​==================================================================================​

 

Standalone

Standalone 인증 방식은 인증서를 발급 및 만료 갱신을 할때 nslookup으로 발급 받고자 하는 웹서버로 질의가 된다면 서버에서 80 tcp 포트로 운영되는 웹서비스가 중지가 되어 있어야 합니다.

 

장점 : 동시에 여러 도메인을 발급을 받을 수 있습니다.

단점 : 발급 전에 80 tcp 포트로 운영되는 웹서비스가 중지를 해야 하므로 서비스 단절이 발생하고 인증서를 발급 및 갱신 할때 까지 실행되면 안됩니다.

 

/etc/init.d/apachectl stop

systemctl stop httpd

certbot certonly --standalone --agree-tos -d 도메인명 -d www.도메인명 -m [서버관리자이메일] --rsa-key-size 4096

/etc/init.d/apachectl start

systemctl start httpd

웹서버 (apache, nginx)

웹서버 인증 방식은 발급 받을때 옵션을 이용하여 주로 사용하는 웹서비스 apache, nginx 2개의 서비스에 대해서 nslookup으로 발급 받고자 하는 웹서버로 질의가 되고, apache, nginx에 도메인 설정이 되어 있다면 발급을 해주는 방법입니다.

 

장점 : 80 tcp 포트로 운영되는 웹서비스를 중단시킬 필요가 없습니다. 또한 리다이렉션으로 웹루트를 지정할 수 없을때 인증하기 좋습니다.

단점 : 사용자가 셋팅을 변경할 수 있지만 자동 업데이트 갱신시 반영되지 않습니다.

 

certbot certonly --apache --agree-tos d 도메인명 -d www.도메인명 -m [서버관리자이메일] --rsa-key-size 4096

certbot certonly --nginx --agree-tos d 도메인명 -d www.도메인명 -m [서버관리자이메일] --rsa-key-size 4096

 

DNS (Wildcard SSL)

DNS 방식은 인증서를 발급 및 만료 갱신을 할때 nslookup으로 발급 받고자하는 웹서버로 질의가 된다면 발급 및 갱신할때 인증받고 있을때 TXT레코드를 발급하여 도메인의 네임서버에 TXT 레코드값을 입력하여 사이트의 유효성을 확인하고 발급 및 갱신을 하는 방법입니다.

 

장점 : 와일드카드 유료인증서처럼 모든 서브도메인에 대해서 인증서로 사용할 수 있습니다.

단점 : 도메인 DNS를 관리/수정할 수 있어야 하며, 인증서 갱신 시마다 DNS에서 TXT값을 변경해야 합니다. 만약 클라우드 플레어등 TXT레코드 발급하면 자동으로 등록해주는 API가 있다면 자동갱신은 가능합니다. 해당부분이 없다면 수동으로 갱신을 해야합니다.

 

certbot certonly --manual --server https://acme-v02.api.letsencrypt.org/directory -d "*.도메인명" -d 도메인명 --preferred-challenges dns-01 

-> 나오는 코드 TXT레코드이므로 등록할 것

 

'WEB & WAS > Apache' 카테고리의 다른 글

mod_rewrite 실전  (0) 2023.03.08
Apache MPM 튜닝  (0) 2023.03.08
Apache 컴파일 옵션  (0) 2023.03.08
CentOS 7 Apache 2.4 소스 컴파일 설치  (0) 2023.03.08
CentOS 7 Apache 2.2 소스 컴파일 설치  (0) 2023.03.08

댓글