back to top
-3.3 C
New York
목요일, 12월 26, 2024

Buy now

최신 Let’s Encrypt SSL 인증서 발급 방법 4가지 정리

여기에서는 우분투 20.04운영체제에서 웹서로로 NGINX를 사용 시 무료 SSL 인증서로 인기있는 Let’s Encrypt SSL 인증서 발급 방법 전반에 대해서 살펴보도록 하겠습니다.

이전에도 정리한 적이 있지만 시간이 흘러 발급 방법이 달라져 수정 정리할 필요가 생겼습니다.

Let’s Encrypt도 알고 보면 수많은 인증서 발급 기관,  CA(Certificate Authority) 업체 중이 하나입니다. 다만 SSL 인증서 가격이 비싸 보급이 느려지면서 인터넷 보안에 문제가 있다는 문제 의식하에 무료 보급을 통한 인터넷 보안을 강화하겠다는 비영리 단체라고 할 수 있습니다.

  1. 인증서 발급 기관, CA(Certificate Authority) 중 점유율이 가장 높은 곳은 IdenTrust로 2020년 12월 기준으로 42%가 넘습니다.(42.3%)
  2. IdenTrust 다음으로는 DigiCert Group(15.7%) > Sectigo(14.1%) > GoDaddy Group(5.4%) > GlobalSign(2.3%
  3. Let’s Encrypt 점유율은 생각보다 낮아서 0.1%에 불과
  4. 하지만 Let’s Encrypt 사용을 아래 그래프에서 보듯 매우 빠르게 증가
    (개인적인 생각으로는 무료이기 때문에 테스트로 중복 인증도 많다고 생각)
Let’s Encrypt SSL 인증서 사용 증가 추이, Graph by Let’s Encrypt
Let’s Encrypt SSL 인증서 사용 증가 추이, Graph by Let’s Encrypt

Let’s Encrypt SSL 인증서는 아래와 같은 장점들이 있어 사용이 확대되고 있습니다.

  1. 인증 절차가 단순(서버에서 필요한 프로그앰들이 설치되어 있다면) 단 한줄 명령어로 발급
  2. 발급 대기 시간 없이 바로 발급(이메일 입력 등을 포함해 1분 이내)
  3. Nginx나 아파치와 같은 웹서버에 맞추어 자동 옵션 설정되도록 설치 가능
  4. 인증 유효기간은 90일이지만 인증을 자동화 가능
  5. 무엇보다도 무료

근래 새롭게 사이트를 구축하하면서 Let’s Encrypt SSL 인증서 발급 과정에서 기존에 알고 있던 방법들이 대부분 작용하지 않는 것을 확인했습니다. 그것은

  • Let’s Encrypt SSL 인증서에서 여러가지 보안 이슈들이 발견되면서 발급 방법에 대한 보완이 진행되었고,
  • 발급에 필요한 패키지들도 업그레이드 되었고,
  • 예전에 알려졌던 기능들 일부는 지원이 중단(예를들어 자동 갱신 기능으로 많이 사용했던 Cert-Auto기능 지원 중단 등)되기도 했으며
  • 운영체제 업그레이드, DB 업그레이드에 따른 문제 발생 등

위와 같은 요인들로 인해서 기존에 알고 있던 방법들이 이를 제대로 반영하지 못하는 것으로 보입니다.

이제 Let’s Encrypt SSL 인증서 발급 방법에 대해서 알아 보시죠.

인증서 설치를 위한 Certbot tool 설치

Let’s Encrypt SSL 인증서 발급은 Certbot을 이용합니다. Certbot은 우분투 20.04를 설치 후 letsencrypt을 설치했다면 그 안에 포함되어 있기 때문에 별도 Certbot을 설치할 필요가 없습니다.

sudo apt update
sudo apt-get install  letsencrypt -yCode language: PHP (php)

[참고] Nginx 또는 아파치용 인증서 프로그램 설치 이용

Let’s Encrypt SSL 인증서 발급은 매우 다양한 방법으로 이루어지는데요. 이 중에는 Nginx나 아파치와 같은 웨서버가 전적으로 인증서를 제어토록 하는 방법이 있습니다.

이 경우 인증서 관리는 웹서버가 세팅과 관리를 알아서 한다고 하는데요. 저는 몇번 테스트해보고 기존 방식을 사용하기로하고 사용을 그만 두었습니다.

이 방법을 사용하려면 웹서버에 맞는 Certbot을 추가 설치합니다.

우선 우분투에서 Nginf용 Certbot 설치는 아래 명령을 사용합니다. 여기서는 Nginx 웹서버용 파이썬3를 설치합니다.

sudo apt update 
sudo apt upgrade -y 
sudo apt install certbot python3-certbot-nginxCode language: PHP (php)

만약 Apache를 사용한다면 python3-certbot-nginx 명령은 아파치를 지원하도록 python3-certbot-apache 명령으로 대체되겠죠.

sudo apt install certbot python3-certbot-apacheCode language: PHP (php)

그리고 과거 자료들을 보면 python-certbot-nginx 명령을 사용하는데 파이썬3으로 업그레이드되면서 파이썬3를 사용하라는 권고를 받습니다.

Let’s Encrypt SSL 인증서 발급 방법 4가지

Let’s Encrypt SSL 인증서 발급 방법은 webroot와 Standalone, DNS의 3가지 방식이 있습니다. 인증서 발급은 사이트에서 인증기관인 Let’s Encrypt에 접속해 이 사이트의 유효성을 검증하는 과정을 거치며 이 과정을 아래 3가지 방법 중 하나를 선택해 진행할 수 있습니다.

  1. webroot : 사이트 디렉토리 내에 인증서 유효성을 확인할 수 있는 파일을 업로드하여 인증서를 발급하는 방법
    . 실제 작동하고 있는 웹서버의 특정 데렉토리의 특정 파일 쓰기 작업을 통해서 인증
    . 이 방식의 장점은 nginx를 중단시킬 필요가 없음.
    . 이 방법의 단점은 인증 명령에 하나의 도메인 인증서만 발급 가능
  2. 웹서버
    . Nginx나 아파치와 같은 웹서버에서 직접 SSL 인증을 실시하고 웹서버에 맞는 SSL세팅값을 부여
    . 발급이나 갱신을 위해 웹서버를 중단시킬 필요가 없음
    . 인증서 갱신 시 상황에 맞게 세팅을 자동으로 업데이트
    . 사용자가 세팅을 변경할 수 있지만 자동 업데이트 시 반영되지는 않음
  3. Standalone : 사이트 작동을 멈추고 이 사이트의 네크워킹을 이용해 사이트 유효성을 확인해 Let’s Encrypt SSL 인증서를 발급하는 방식
    . 80포트로 가상 staandalone 웹서버를 띄워 인증서를 발급
    . 이 방식은 동시에 여러 도메인을 발급 받을 수 있음
    . 그렇지만 인증서 발급 전에 Nginx를 중단하고 발급 완료 후 다시 Nginx를 시작해야 함
  4. DNS : 도메인을 쿼리해 확인되는 TXT 레코드로 사이트 유효성을 확인하는 방법
    . 와일드 카드 방식으로 인증서를 발급 가능
    . 이 방법은 당연하게도 서버 관리자가 도메인 DNS를 관리/수정할 수 있어야 하며
    . 인증서 갱신 시마다 DNS에서 TXT값을 변경해야 하므로
    외부에서 TXT 레코드를 입력할 수 있도록 DNS가 API를 제공하는 경우만 갱신 과정을 자동으로 처리(클라우두플레어 API가 대표적인 사례)

1. webroot으로 SSL 인증서 발급

이 방법에 대해서는 Let’s Encrypt 설치 및 SSL 인증서 발급, NGINX 설정 방법nginx 서버에 HTTPS사용을 위한 SSL 인증서 발급받기 (Let’s Encrypt)등을 참조했습니다.

솔직히 이 방법은 번거롭기도하고 나중에 설명하겠지만 한계도 있는 방법입니다. 한번 설치해 운영하다가 한 서버에서 여러 도메인을 운영하는 것이 쉽지 않고, 이 방식으로 인증 시 일부 회사 방화벽에서 거부당하는 사례를 발견해서 사용 중단했습니다.

well-known이 있는 곳을 지정

위에서 설명한 것처럼 이 방법은 사이트 디렉토리 내에 인증서 유효성을 확인할 수 있는 파일을 업로드하여 인증서를 발급하는 방법으로 서버 내에 .well-known이 있는 곳을 지정해 줍니다.

이는 엄청 번거롭지만 1) 특정 폴더를 만들고 2) 이 특정 폴더에서 letsencrypt.conf 파일을 만들고 3) 이를 Nginx 설정 파일에서 이 파일을 읽어오도록 합니다.

먼저 특정 폴더를 만들고 mkdir -p 명령 옵션을 사용해 존재하지 않는 폴더를 만들어 줍니다.

mkdir -p /var/www/letsencrypt/.well-known/acme-challengeCode language: PHP (php)

다음으로는 webroot 경로를 알려주는 letsencrypt.conf 파일을 만듭니다. 이 파일 위치는 일반적으로 /etc/nginx/snippets/에 만드네요. 뭐 nano 편집기를 이용해서 아래와 같이 새로 만들 파일을 엽니다.

nano /etc/nginx/snippets/letsencrypt.conf Code language: PHP (php)

이 파일에 아래와 같은 내용을 추가합니다.

location ^~ /.well-known/acme-challenge/ {
default_type "text/plain";
root /var/www/letsencrypt;
}Code language: PHP (php)

다음으로는 Nginx 설정 파일 중 server 영역에서 아래 파일을 참조하도록 합니다.

include /etc/nginx/snippets/letsencrypt.conf;Code language: PHP (php)

이렇게 설정이 끝나면 Nginx를 다시 시작해 주어야겠죠.

sudo service nginx restartCode language: PHP (php)

예를 들면 아래와 같습니다.

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;
    server_name happist.com www.happist.com;

    include /etc/nginx/ssl/letsencrypt.conf;

    location / {
        return 301 https://www.happist.com$request_uri;
        expires epoch;
        # return 301 아래에 expires epoch; 을 붙여주는 것은 301 리다이렉트가 캐싱되지 않도록 하기 위함
    }

}Code language: PHP (php)

SSL 인증서 발급

SSH command line에서 아래 명령을 입력합니다.

certbot certonly --webroot --webroot-path=/var/www/letsencrypt  -d 사이트명.com -d www.사이트명.com  Code language: PHP (php)

여기서 webroot-path는 사이트 루트를 말하는 것이 아니라 .well-known 폴더가 있는 곳을 말합니다.

2. 웹서버를 통한 Let’s Encrypt SSL 인증서 발급

앞에서 설명했듯이 SSL인증서를 일반적인 방식으로 발급할 수도 있도 Apache나 Nginx와 같은 웹서버 옵션을 이용해서 Let’s Encrypt SSL 인증서 발급받을 수도 있습니다.

웹서버를 통한 SSL 인증서 발급 방법의 좋은 점은 standalone 방식과 비슷한 방식이면서도 다르게 발급 받을 시 사이트 서비스를 중단하지 않아도 된다는 점이고, 웹서버가 알아서 적절한 SSL 옵션을 제안해 적용해 준다는 점입니다.

이 과정을 다시 자세하게 설명하면

Certot 설치

서버에서 SSL 인증서를 설치할 웹서버용 인증서 설치 툴인 Certbot을 설치합니다. 위에서 설명했듯이 nginx 웹서버용입니다. Certbot은 파이썬 2.7 또는 3.6버젼 이상을 지원한다고 하네요.

sudo apt install certbot python3-certbot-nginxCode language: PHP (php)

아파치라면 아래 명령어를 사용합니다.

sudo apt install certbot python3-certbot-apacheCode language: PHP (php)

Nginx 설정 확인

Nginx 설정에서 도메인이 제대로 설정되어 있는지 확인합니다. 다른 방식은 nginx 설정에서 도메인에 적용되어 있는지가 중요하지 않지만 웹서버를 이용하는 SSL 인증 방식 선택 시 Nginx 설정에서 도메일이 제대로 설정되어 있어야 합니다.

Nginx 설정 파일은 웹서버 설치 방식에 따라 달라지지만 Nginx 기본 설치 방식으로는 설치 시 /etc/nginx/conf.d/에 있고, 우분투에서 권장하는 방식으로 설치 시 /etc/nginx/sites-available/ 디렉토리에 있습니다.

저는 우분투 20.04를 사용하지만 Nginx 기본 설치 방식으로 설치해 /etc/nginx/conf.d/ 디렉토리 아래에 happist.com.conf라는 파일을 만들어 설정 내용을 넣엇습니다.

nano /etc/nginx/conf.d/happist.com.confCode language: PHP (php)

여기에서 다음과 같은 server_name이 등록되어 있는지만 확인하면 됩니다.

server_name example.com www.example.com;Code language: PHP (php)

도메인 등록이 되어 있는지 확인이 되었으면 편집기를 닫습니다. 없다면 도메인을 등록 , 저장 후 편집기를 빠져 나옵니다.

본격적으로 SSL 인증을 시작하기 전에 nginx가 제대로 작동하는지 확인합니다. 우선 테스트해 봅니다.

sudo nginx -tCode language: PHP (php)

아무 문제가 없다고 나오면 nginx를 다시 가동시킵니다.

sudo systemctl reload nginxCode language: PHP (php)

방화벽에서 HTTPS를 허용

아마 기본적으로 설정되어 있기는 하겠지만 80포트와 443포트를 허용해 주고 있는지 확인합니다.

우분투 20.04라면 기본 방화벽으로 ufw를 사용하고 있겠죠. 여기에서라면 ‘Nginx Full’ 옵션을 사용합니다.

sudo ufw allow ssh
sudo ufw allow 'Nginx Full'Code language: PHP (php)

그냥 iptables를 사용한다면 다음 명령으로 80포트와 443포트를 사용 가능하게 만들 수 있습니다.

sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPTCode language: PHP (php)

SSL 인증서 발급

이제 본격적으로 SSL 인증서를 발급해 보시죠. Nginx 웹서버의 경우 아래 명령어를 사용합니다.

sudo certbot --nginx -d 사이트명.com -d www.사이트명.com  Code language: PHP (php)

만약 아파치라면 다음과 같은 명령을 사용합니다.

sudo certbot --apache d 사이트명.com -d www.사이트명.com  Code language: PHP (php)

그러면 /etc/etsencrypt 폴더에 자동으로 SSL 적용 옵션을 제안해 줍니다. 사용자는 이 옵션을 그대로 사용할 수도 있고, 독자적인 옵션을 적용할 수도 있습니다.

그러나 별도 옵션을 적용하면 nginx가 제안하는 사항들이 제대로 업데이트가 안되기 때문에 매번 수작업으로 업데이트를 해주어야 합니다.

독자적인 옵션을 사용하지 않고 그냥 웹서버가 제안하는 옵션 그대로 사용한다면 나쁘지 않다는 생각입니다.

자동 갱신

자동 갱신은 크론에서 다음 명령어를 적용해 가능토록 만들 수 있습니다.

sudo certbot renew --dry-runCode language: PHP (php)

3. standalone 옵션 적용 SSL 인증서 발급

여기 소개하는 standalone 옵션은 사이트 서비스를 중단하고 사이트의 네트워킹을 이용해 인증서버와 접속하는 방식을 사용합니다. 처음에 가장 많이 소개된 방식이기도 합니다.

이러한 방식은 단점이면서도 장점을 가지는데요. 단점은 이 인증을 진행하는 동안 사이트 서비스를 중단해야 한다는 점이구요. 장점은 간편하고 빠르고 더우기 안정성도 높습니다.

사내 방화벽을 매우 까다롭게 관리하는 국내 일부 회사 중에서 SSL 인증 방식에 따라 접속을 허용하는 않는 경우도 있는데요. 우리나라에서 가장 큰 회사 중의 하나도 이 standalone 방식만 제대로 통과되는 것으로 확인하기도 했습니다.(2020년 5월 기준)

이런 저런 이유로 웹서버를 중단시키고 발급받는 불편함은 있지만 상대적으로 안정적인 방식이라고 생각합니다.

아래와 같은 명령어를 사용합니다. 혼란을 피하기 위해 처음부터 다시 설명해 봅니다.

우선 SSL 인증을 위한 Certbot tool을 설치합니다. 이전 단계에서 설치 했다면 Pass

sudo apt update
sudo apt-get install  letsencrypt -yCode language: PHP (php)

다음으로는 웹서버를 중단시킵니다. 아무 디렉토리에서나 가능한 명령이지만 root로 이동해서 진행해 봅니다.

cd /root/
service nginx stopCode language: PHP (php)

이제 certbot 명령을 이용해 SSL 인증을 시작합니다. standalone 명령을 사용하고 도메인 이름만으로 인증이 진행되는 -d 옵션을 적용합니다.

certbot certonly --standalone -d 사이트명.com -d www.사이트명.comCode language: PHP (php)

인증이 완료되면 웹서버를 다시 가동시킵니다.

service nginx restartCode language: PHP (php)

여러개 도메인을 한번에 인증받기

이 standalone 옵션은 또한 한꺼번에 여러 개의 사이트를 인증 받을 수 있는데요. 아래와 같은 명령을 사용할 수 있습니다. 이는 연속해서 사이트명을 나열해주면 가능합니다.

예를들면 아래와 같이요.

service nginx stop
certbot certonly –standalone -d happist.com -d http://www.happist.com -d sample1.com -d http://www.sample1.com -d sample2.kr -d http://www.sample2.kr -d sample3.co -d http://www.sample3.co -d sample4.net -d http://www.sample4.net
service nginx restart
Code language: PHP (php)

단 이렇게 여러개 사이트를 인증 받을 시 인증서 존재 위치가 맨앞 사이트명으로 통일되게 됩니다. 나중에 사이트를 없앨 때 난감할 수도 있습니다.

즉 위의 경우 맨 앞에 happist.com 이름을 딴 폴더가 만들어지고 이 폴더 아래에 4개의 .pem 파일이 만들어지고, 이 파일들이 5개 사이트에 대한 인증이 구성됩니다.

그럴 경우 나중에 어느 한 사이트를 없애는 경우 – 사이트가 커져서 그 사이트는 다른 서버에서 운영을 한다던지, 아예 사이트를 폐쇄해 버리든지 – 하는 경우 관리가 불편해 질 수 있습니다.

따라서 조금 귀찮드라로도 사이트 하나 하나 명령어를 따로 입력하는 것이 관리엔 더 좋습니다. 아래처럼

certbot certonly --standalone -d happist.com -d www.happist.com

certbot certonly --standalone -d sample1.com -d www.sample1.com

certbot certonly --standalone -d sample2.kr -d www.sample2.kr

certbot certonly --standalone -d sample3.co -d www.sample3.co

certbot certonly --standalone -d sample4.net -d www.sample4.netCode language: PHP (php)

이렇게 각각 명령을 사용해 인증하면 사이트마다 폴더가 생겨서 관리가 좀금 더 쉽워집니다. 아래처럼 각 사이트별 폴더가 형성됩니다. 그 폴더 아래에 그 사이트에 해당하는 각종 .pem 파일이 만들어지기 때문에요.

  • /etc/letsencrypt/live/happist.com
  • /etc/letsencrypt/live/sample1.com
  • /etc/letsencrypt/live/sample2.kr
  • /etc/letsencrypt/live/sample3.co
  • /etc/letsencrypt/live/sample4.net

4. DNS 이용해 발급 받기

도메인이 연결된 DNS의 TXT레코드를 이용해 인증받는 방식으로 많은 장점을 가진 방법이지만 갱신 시 마다 DNS 정보 중 TXT 레코드를 새로 생성해야 하므로 이를 지원하는 DNS API가 없는 경우 자동 갱신이 어렵다는 단점이 있습니다.

  • 와일드 카드 방식으로 인증서를 발급 가능
  • 당연하게도 서버 관리자가 도메인 DNS를 관리/수정할 수 있어야 하며
  • 인증서 갱신 시마다 DNS에서 TXT값을 변경해야 하므로
    외부에서 TXT 레코드를 입력할 수 있도록 DNS가 API를 제공하는 경우만 갱신 과정을 자동으로 처리

이 방법은 위에서 소개한 방법 중에서 가장 까다로운 방법으로 에러 가능성이 높아 여러번 시도하다보면 최대 허용 시도를 초과해 당분간(1주일 정도) 인증이 불가능해지는 불쌍사가 종종 발생하더군요.

그래서 저는 편리함에도 불구하고 사용하지 못하고 있습니다.

클라우드플레어(CloudFlare)의 경우

DNS를 클라우드플레어(CloudFlare)에 도메인 네임서버로 등록해 사용하는 경우 클라우드플레어(CloudFlare)가 제공하는 DNS API를 이용해서 와일드 카드 인증서 등록 및 갱신이 가능합니다.

클라우드플레어(CloudFlare) API 관리 폴더와 파일 생성

클라우드플레어(CloudFlare) API를 관리할 폴더와 파일을 생성합니다.

cd /root
mkdir .secret
nano /root/.secret/cloudflare_api.iniCode language: PHP (php)

cloudflare_api.ini 파일에는 아래 내용을 추가합니다.

여기서 이메일 주소는 클라우드플레어(CloudFlare) 계정에 등록된 이메일이고, Global API Key는 CloudFlare의 계정 관리에서 발급 받을 수 있습니다.

dns_cloudflare_email = "이메일 주소 입력"
dns_cloudflare_api_key = "Global API Key 입력"Code language: PHP (php)

생성한 폴더와 파일에 대한 권한을 변경합니다.

chmod 700 /root/.secret
chmod 400 /root/.secret/cloudflare_api.iniCode language: PHP (php)

Certbot tool과 클라우드플레어 DNS 인증 플러그인 설치

여기에서는 SSL 인증 진행에 필요한 Certbot tool인 letsencrypt과 클아우드플레어 인증 플러그인을 설치합니다.

먼저 인증 플러그인 설치를 위한 파이선 PIP를 설치합니다.

<em>apt install python-pip</em>Code language: PHP (php)
<em>pip install certbot-dns-cloudflare</em>Code language: PHP (php)

혹시SSL 인증을 위한 Certbot tool가 설치되지 않았다면 설치합니다. 이전 단계에서 설치 했다면 Pass

sudo apt update
sudo apt-get install  letsencrypt -yCode language: PHP (php)

SSL 인증서 발급

SSL 인증서 발급 명령어입니다. example.com을 예를 든 것이고 자신의 도메일을 대체하면 됩니다.

/usr/local/bin/certbot certonly --dns-cloudflare --dns-cloudflare-credentials /root/.secret/cloudflare_api.ini -d example.com,*.example.com --preferred-challenges dns-01Code language: PHP (php)

이후 nginx라면 dhparam을 생성해 줍니다.

mkdir /etc/nginx/ssl  
cd /etc/nginx/ssl
openssl dhparam -out dhparams.pem 4096Code language: PHP (php)

이후 아래 명령을 추가합니다.

openssl rand 48 > 
session_ticket.key Code language: PHP (php)

인증서 자동 갱신

이렇게 발행된 인증서를 자동으로 갱신하기 위해서는 코론에 등록합니다.

crontab -eCode language: PHP (php)

Nginx라면 아래와 같은 내용을 추가합니다.

30 4 * * 0 /usr/local/bin/certbot renew --quiet --post-hook "/usr/sbin/service nginx reload" > /dev/null 2>&1Code language: PHP (php)

아파치라면 아래 명령을 사용합니다.

30 4 * * 0 /usr/local/bin/certbot renew --quiet --post-hook "/usr/sbin/service apache2 restart" > /dev/null 2>&1Code language: PHP (php)

Vultr에서 DNS를 이용한 와일드카드 인증 방법

가상서버 호스팅인 Vultr를 이용하는 경우에도 DNS를 이용해 와일드카드 인증이 가능하다고 합니다.

이는 Install Wildcard Certificate from Let’s Encrypt (Ubuntu 20.04 + Nginx + Vultr)를 참조해 간단히 정리했습니다.

필요 사항

  • 우분투 20.04 설치된 서버
  • Vultr DNS에 도메인 네임 등록, 예를들어 example.com
  • A/AAAA 레코드 및 CNAME DNS 레코드 등록
  • Vultr API 사용 가능 상태로 변경
    . 이는 Account – API에서 Enanble API를 눌러서 활성화 함
    . 그러면 Personal Access Token 번호가 나오는데 이를 기록해 놓음
Vultr 가상 서버 API

필요 패키지 설치

이 작업에 필요한 필요 패키지를 설치합니다. 우선 파이썬이 없으면 파이선3를 설치합니다. 그렇지만 우분투 20.04를 설치하면 파이썬 3가 설치되어 있습니다.

<code>sudo apt install -y python3</code>Code language: PHP (php)

다음으로는 Lexicon tool을 설치하는데요. 이는 다양한 DNS 프로바이더로부터 DNS 기록을 관리할 수 있는 파이썬 도구라고 합니다.

<code>sudo apt install -y lexicon</code>Code language: PHP (php)

acme.sh 클라이언트 설치

이 클라이언트는 root 사용자만 설치 가능하므로 root 사용자로 전환합니다.

<code>sudo su - root</code>Code language: PHP (php)

scme.sh를 다운받아 설치합니다. 아래 your_email@example.com는 Vultr 계정에서 사용하는 이메일 주소입니다.

<code>git clone https://github.com/Neilpang/acme.sh.git </code>
<code>cd acme.sh </code>
<code>./acme.sh --install --accountemail "your_email@example.com" </code>
<code>source ~/.bashrc </code>
<code>cd</code>Code language: PHP (php)

와일드카드 SSL 인증

도메인에 대한 RSA와 ECC와일드카드 인증을 받습니다. 아래와 같은 명령을 사용합니다.

  • 아래 your_email@example.com는 Vultr 계정에서 사용하는 이메일 주소
  • XXXXXXXXXXXXXXX은 Personal Access Token 번호
Configure your API key and username
 export PROVIDER=vultr
 export LEXICON_VULTR_USERNAME="your_vultr_email@example.com"
 export LEXICON_VULTR_TOKEN="XXXXXXXXXXXXXXX"
 RSA 2048
 acme.sh --issue --dns dns_lexicon -d example.com -d '*.example.com' --keylength 2048
 ECC 256
 acme.sh --issue --dns dns_lexicon -d example.com -d '*.example.com' --keylength ec-256Code language: PHP (php)

이러한 작업 결과 RSA 및 ECC/ECDSA인증 및 키는 아래 폴더에 위치하게 됩니다.

RSA: <code>~/.acme.sh/example.com</code> directory.
ECC/ECDSA: <code>~/.acme.sh/example.com_ecc</code> directory.Code language: PHP (php)

이들 폴더를 이용할 수 없기 대문에 이들을 /etc/letsencrypt 폴더로 옮김니다. 먼더 폴더를 만들고..

<code>sudo mkdir -p /etc/letsencrypt/example.com </code>
<code>sudo mkdir -p /etc/letsencrypt/example.com_ecc</code>Code language: PHP (php)

아래 명령으로 인증 및 복사합니다.

RSA
 acme.sh --install-cert -d example.com \
         --cert-file /etc/letsencrypt/example.com/cert.pem \
         --key-file /etc/letsencrypt/example.com/private.key \
         --fullchain-file /etc/letsencrypt/example.com/fullchain.pem \
         --reloadcmd "sudo systemctl reload nginx.service"
 ECC/ECDSA
 acme.sh --install-cert -d example.com --ecc \
         --cert-file /etc/letsencrypt/example.com_ecc/cert.pem \
         --key-file /etc/letsencrypt/example.com_ecc/private.key \
         --fullchain-file /etc/letsencrypt/example.com_ecc/fullchain.pem \
         --reloadcmd "sudo systemctl reload nginx.service"Code language: PHP (php)

SSL 인증서 관련 참고

최신 Let’s Encrypt SSL 인증서 발급 방법 4가지 정리

Let’s Encrypt SSL 인증서 발급 및 자동 갱신 방법(업데이트)

최신 보안 트렌드를 반영한 Let’s Encrypt 인증서 세팅 방법

웹, 브라우저, 서버에서 SSL 인증서 정보 확인 방법, SSL 인증서 만료일 확인 등

서버 보안 관련

랜섬웨어 대응, 서버 및 워드프레스 필수 보안 설정 15가지

워드프레스 보안 강화 NGINX 설정 방법 8가지

리눅스 서버 보안을 위한 포트 사용 최적화

리눅스 서버 root 사용 중지로 리눅스 서버 보안 강화하기

우분투 서버 보안 자동 업데이트 및 업데이트 메일 통보 방법

워드프레스 보안 진단 WPScan 사용법 및 이메일로 결과 받아보기

DDoS 취약 기능 XMLRPC 사용 중지로 워드프레스 보안 강화하기

워드프레스 보안 강화를 위한 사용자명 변경 방법

워드프레스 멀웨어 경험에서 배운 워드프레스 보안 가이드

가상서버호스팅 서버 보안 설정 방법 – Nginx +Ubuntu의 경우

spot_img

Latest articles

Related articles

spot_img