무료 인증서 이용 약관
1. 무료 인증서 사용을 위한 운영체제 서버 조건, 지원 운영체제
(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 모듈이 있어야 합니다(환경 변수를 설정하면 이렇게 소스를 입력할 수 있습니다)
.데비안과 같은 apache2ctl -M | grep SSL
.
Redhat은 소스 설치 시 컴파일 옵션에 –enable-ssl 옵션을 입력하여 설치해야 합니다.
또한 httpd.conf에서 load 등을 주석 처리하고 ssl.conf에서 관련 부분을 주석 처리하십시오.
.
apahce 2.4는 httpd.conf입니다.
LoadModule socache_shmcb_module 모듈/mod_socache_shmcb.so
LoadModule socache_dbm_module 모듈/mod_socache_dbm.so
LoadModule ssl_module 모듈/mod_ssl.so
.
아파치 2.2 httpd.conf
LoadModule ssl_module 모듈/mod_ssl.so
.
켜기만 하면 됩니다.
3개의 모듈에 전원이 공급되어야 합니다.
.
# /usr/local/apache/bin/apachectl -M | grep -E ‘ssl|소캐시’
socache_shmcb_module(공유)
socache_dbm_module(공유)
ssl_module(공유)
.
소스 Apache 컴파일을 설치할 때 mod_ssl에 –enable-ssl이 없으면 다시 설치해야 합니다.
.
Certbot 설치
# yum install -y certbot certbot-apache certbot-nginx mod_ssl // 레드햇
# apt-get install certbot certbot-apache certbot-nginx mod_ssl // 데비안
무료 인증서 자동 갱신 설정(crontab)
.(%%경고!! 발행일은 29~31일 사이입니다. 그럼 28일로 설정하세요.%%)
.
암호화하자 90 일입니다. 그래서 매달 적용하면 31일인 달은 결국 일수가 다 되어 1~2일 동안 인증이 불가능하게 됩니다.
따라서 15일마다 설정하면 제대로 인증됩니다.
예를 들어, 5일에 발행되었습니다.
* Letsencrypt 인증서
전)
# crontab -e
30 4 5.20 * * certbot 갱신
30 4 5.20 * * /etc/init.d/apachectl Graceful(소스에서 설치한 경우)
30 4 5.20 ** systemctl reload httpd(패키지 설치)
.
전)
# vi /etc/crontab
30 4 5.20 * * 루트 certbot 갱신
30 4 5.20 ** root /etc/init.d/apachectl Graceful(소스에서 설치한 경우)
30 4 5.20 ** root systemctl reload httpd(패키지 설치)
.
* 바이패스 인증서 180일, 6개월 인증 기간, 121일에서 180일로 연장 가능.
.
Buypass 인증서에 대한 참조입니다. 퓨니코드 도메인(한국어 도메인)이 발급되지 않는 것 같습니다.
Buypass 인증서로 신청할 때 월 단위로 crontab을 설정하는 것이 좋습니다.
.
전)
# crontab -e
30 4 16 * * Certbot 갱신
30 4 16 * * /etc/init.d/apachectl Graceful(소스에서 설치한 경우)
30 4 16 * * systemctl httpd 재로드(패키지 설치)
예)
# vi /etc/crontab
30 4 16 * * 루트 certbot 갱신
30 4 16 ** root /etc/init.d/apachectl Graceful(소스에서 설치하는 경우)
30 4 16 ** root systemctl reload httpd(패키지 설치)
.
certbot 발급 방식
1. 웹루트 방식(–webroot)
2. 독립형 방식(–standalone)
3. 웹서버 방식(Apache, nginx) (–apache, –nginx)
4. DNS 방식(–manual)
웹루트 스타일
.웹루트 방식은 인증서 발급 및 갱신 시 웹서버에 nslookup을 통해 발급요청을 하면 80년대 TCP 포트에서 동작하는 웹서비스가 도메인과 웹루트 디렉토리가 일치하는지, 일치하는지, 일치하는지 확인하는 구조이다. 일치하면 출력됩니다.
장점: 80 TCP 포트에서 실행 중인 웹 서비스를 중지할 필요가 없습니다.
단점: 인증 요청에 기재된 도메인 인증서는 1개만 발급 가능
# certbot certonly –webroot –agree-tos -m(서버 관리자 이메일) -w(webroot 디렉터리 위치) -d(도메인 1) -d(도메인 2(일반) www.onedomain)) -d(도메인 3) –rsa-key-size 4096
.
.
인증서 발급 시 180일 구매권 인증서 발급 명령어
# certbot certonly –webroot –agree-tos –server https://api.buypass.com/acme/directory -m(서버 관리자의 이메일 주소) -w(webroot 디렉토리 위치) -d(도메인 1) -d(도메인 2(보통 www.onedomain)) -d(도메인 3) –rsa-key-size 4096
.
privkey.pem = 키 파일
cert.pem = 인증서 파일
chain.pem = 인증서 발급자의 파일
fullchain.pem = cert.pem + chain.pem 파일을 하나로 합친 것
.
ssl.conf 설정
============================================== ==== ============================
.
ServerAdmin(관리자 이메일)
DocumentRoot “(webroot 디렉토리 위치)”
서버 이름 “(OneDomain)”
서버 별칭 “(www.onedomain)” “(기타 하위 도메인)”
.
ErrorLog “/usr/local/apache/logs/ssl_onedomain-error_log” # (소스에서 설치하는 경우)
TransferLog “/usr/local/apache/logs/ssl_onedomain-access_log” # (소스에서 설치하는 경우)
.
#ErrorLog “/var/log/httpd/ssl_onedomain-error_log” #(패키지 설치 시)
#TransferLog “/var/log/httpd/ssl_onedomain-access_log” #(패키지 설치 시)
.
SSL 엔진 켜짐
.
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateKeyFile /etc/letsencrypt/live/domain/privkey.pem
SSLCertificateFile /etc/letsencrypt/live/domain/cert.pem
SSLCertificateChainFile /etc/letsencrypt/live/domain/fullchain.pem # 또는 fullchain.pem 대신 chain.pem을 사용할 수 있습니다.
.
SSLOptions+StdEnvVars
SSLOptions+StdEnvVars
.
BrowserMatch “.*MSIE.*” \
nokeepalive ssl-unclean-shutdown \
다운그레이드 1.0 포스 리스폰스 1.0
.
CustomLog “/usr/local/apache/logs/ssl_request_log” \
“%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \”%r\” %b”
============================================== ==== ============================
독립형
독립형 인증 방식을 사용하는 경우 인증서 발급 및 갱신 시 웹 서버에 nslookup으로 발급 요청을 하면 서버의 TCP 포트 80에서 실행 중인 웹 서비스를 중지해야 합니다.
장점: 동시에 여러 도메인을 할당할 수 있습니다.
단점: 80 tcp 포트에서 실행되는 웹 서비스는 발급되기 전에 중지되어야 하므로 서비스 연결이 끊어지고 인증서가 발급 및 갱신될 때까지 실행되지 않아야 합니다.
/etc/init.d/apachectl 중지
systemctl은 httpd를 중지합니다.
certbot certonly –standalone –agree-tos -d 도메인 이름 -d www.domainname -m(서버 관리자 이메일) –rsa-key-size 4096
/etc/init.d/apachectl 시작
systemctl은 httpd를 시작합니다
.
웹 서버(Apache, Nginx)
웹서버 인증 방식은 주로 사용되는 두 가지 웹 서비스인 Apache와 nginx에 대해 nslookup으로 발급할 웹 서버에 쿼리를 발급 시 옵션을 이용하여 발급하는 방식으로 Apache에 도메인이 설정되어 있을 때 발급되며, Nginx가 보이지 않습니다.
장점: 80 TCP 포트에서 실행 중인 웹 서비스를 중지할 필요가 없습니다. 또한 리디렉션으로 웹루트를 지정할 수 없을 때 인증에 유용합니다.
단점: 사용자가 설정을 변경할 수 있지만 자동 업데이트에 반영되지 않습니다.
certbot certonly –apache –agree-tos d 도메인 이름 -d www.domainname -m(서버 관리자 이메일) –rsa-key-size 4096
certbot certonly –nginx –agree-tos d 도메인 이름 -d www.domainname -m(서버 관리자 이메일) –rsa-key-size 4096
.
DNS(와일드카드 SSL)
DNS 방식의 경우 인증서 발급 및 만료 시 nslookup을 통해 웹 서버에 발급 요청을 하면 발급 및 갱신 시 인증이 된 경우 TXT 레코드를 발급하고, 해당 사이트의 유효성은 TXT 레코드 값을 입력하여 도메인의 네임서버에 입력하였으니 확인 후 발급 및 갱신합니다.
장점: 유료 와일드카드 인증서와 같이 모든 하위 도메인에 대한 인증서로 사용할 수 있습니다.
단점: 도메인 DNS를 관리/변경할 수 있어야 하며 인증서가 갱신될 때마다 DNS의 TXT 값을 변경해야 합니다. 다음과 같이 TXT 레코드 발급 시 자동으로 등록하는 API가 있는 경우 B. Cloudflare, 자동 갱신이 가능합니다. 그렇지 않은 경우 수동으로 업데이트해야 합니다.
certbot certonly –수동 –서버 https://acme-v02.api.letsencrypt.org/directory -d “*.domainname” -d 도메인 이름 –preferred-challenges dns-01
-> 나오는 코드는 TXT 레코드이므로 등록