AWS ELB에 내장된 Let's Encrypt를 다운타임 제로로 업데이트

6772 단어 elbSSLletsencryptAWS

0. 배경



무료의 SSL 증명서라고 하는 것으로 화제의 Let's Encrypt입니다만, 실제의 이용을 위해서는 90일마다 증명서를 갱신하지 않으면 안 된다고 하는 제약으로부터, 좀처럼 프로덕션 이용하려면 허리가 무거워져 버립니다 .
(물론 본가에서는 전자동으로 갱신하는 것을 추천하고 있습니다.)

하물며, AWS ELB 등의 로드 밸런서를 이용해, 부하에 복수의 Web 서버가 있으면, ACMEプロトコル 를 통과시키는 것만으로도 고생입니다.

그래서 nginx의 역방향 프록시를 사용하여 기존 애플리케이션에 영향을주지 않고 Let's Encrypt를 업데이트하는 방법을 시도했습니다.

1. 전제



이번에는 다음과 같은 환경을 상정합니다.
  • www.example.com에서받는 ELB 아래에 여러 웹 서버가 있음
  • stg.example.com에서받는 ELB 아래에 웹 서버가 있음
  • www.example.comstg.example.com에 사용되는 인증서는 하나로 묶여 좋다



  • 2. letsencrypt 실행 서버 준비



    Amazon Linux에서 letsencrypt 실행은 여전히 ​​불안정하며 프로덕션 서버에 불필요한 라이브러리를 설치하고 싶지 않으므로 letsencrypt 실행 전용 서버를 준비합니다.

    이번에는 CentOS7을 이용했습니다.



    서버 시작 후 필요한 종속성은 git뿐입니다.
    그런 다음 letsencrypt를 설치합니다.
    또한 후술하는 역방향 프록시를 위해 firewalld를 끕니다.
    (firewalld를 닫기 전에 보안 그룹이 닫혀 있는지 확인하십시오)

    # yum install git
    # systemctl stop firewalld.service
    
    # cd /usr/local/src
    # git clone https://github.com/letsencrypt/letsencrypt.git
    # cd letsencrypt
    

    이것으로 서버 준비가 완료됩니다.
    Route 53부터 letsencrypt.example.com라는 도메인이 이 서버를 가리키도록 레코드를 지정해 봅시다.

    이대로 다음 명령을 실행하면Let's Ecnrypt에서 인증서를 가져오지만 지정된 모든 도메인에 대한 요청(ACMEプロトコル)이 서버에 도착해야 하므로 실패합니다.

    3. 역방향 프록시 설정


    www.example.comstg.example.com에 대한 액세스가 letsencrypt実行サーバ로 우회하도록 각 서버에서 작동하는 nginx 리버스 프록시 설정을 구성합니다.

    Let's Encrypt의 ACME 프로토콜은 /.well-known/...에 액세스하므로이 디렉토리 만 프록시하면 충분합니다.

    이 설정 덕분에 프로덕션 환경에 영향을 미치지 않습니다.

    /etc/nginx/conf.d/app.conf
    server {
      listen 80;
      server_name www.example.com;
    
      ...
    
      # lets encrypt ACME proxy
      location /.well-known {
        proxy_pass http://letsencrypt.example.private;
      }
    }
    

    여기서 역방향 프록시 대상 호스트를 letsencrypt.example.private로 두면 다음에 업데이트할 때 동일한 작업을 건너뛸 수 있습니다.

    그런 다음 Route 53에서 letsencrypt.example.private의 Private DNS를 구성합니다.



    4. letsencrypt 실행


    letsencrypt実行サーバ로 돌아가서 letsencryptコマンド를 실행합시다.

    # pwd 
    /usr/local/src/letsencrypt
    
    # ./letsencrypt-auto certonly --standalone -d www.example.com -d stg.example.com -d letsencrypt.example.com
    

    위를 실행하면 다음 디렉토리에 인증서가 생성됩니다.

    # cd /etc/letsencrypt/live/letsencrypt.example.com
    # ls
    cert.pem  chain.pem  fullchain.pem  privkey.pem
    
    privkey.pemプライベートキー, fullchain.pemパブリックキー証明書로 읽어 ELB SSL 인증서를 설정합니다.



    이것으로 다운타임 없이 ELB 인증서 갱신이 완료됩니다.

    이번에는 시도하지 않았지만 AWS CLI를 사용하여 전자동으로 만들 수 있습니다.

    5. 정리



    무료로 사용할 수 있는 SSL 증명서라고는 하지만, 그 설정에는 아직 시들지 않은 부분이 있습니다.
    Tokyo Region에서 AWS Certificate Manager를 사용할 수 있을 때까지 이 기사가 도움이 되지 않을까요?

    6. 참고 URL


  • Let's Encrypt
  • Let's Encrypt를 지원하는 ACME 프로토콜
  • Let's Encrypt로 간편하게 HTTPS 서버 구성
  • Let's Encrypt 인증서 자동 발급 및 ELB 자동 등록을 수행한 로그
  • 대량의 ELB SSL 인증서를 AWS CLI로 쉽게 업데이트
  • Will Let’s Encrypt work for me? (Multiple servers serving one domain)
  • 좋은 웹페이지 즐겨찾기