Heroku SSL + Let's Encrypt에서 와일드카드 SSL 인증서 설정

소개


  • Heroku에서 Let's Encrypt의 SSL 인증서를 ACM (Automated Certificate Management)에 배포 할 수 있지만 와일드 카드를 지원하지 않습니다. 그래서 직접 설정해야합니다.
  • 이 문서에서는 자동 업데이트 관련 내용을 포함하지 않습니다. 죄송합니다 ... 또 다른 기사에서 씁니다.
  • 와일드 카드의 SSL 인증서를 만드는 부분도 포함되지 않습니다.

  • Let's Encrypt 와일드카드 인증서를 얻는 방법 참고 의 기사가 참고가 됩니다! !

  • 샘플 코드에서 Heroku 앱 이름은 sushi입니다.

  • 주제



    Heroku를 이용하고 있고, 와일드카드 SSL을 무료로 넣고 싶어서 조사한 내용을 메모적으로 기재합니다. 순서로서는, 이하 2점입니다.
  • 도메인 추가(고유 도메인)
  • SSL 인증서 업로드

  • 도메인 추가


    $ heroku domains:add *.example.com --app sushi
    Added *.example.com to sushi... done
    ...
    

    덧붙여서, Heroku SSL 를 이용하고 있습니다. Heroku SSL 과, SSL Endpoint 는 별개이므로, 조심해 주세요. 이번에는 Heroku SSL을 사용합니다.

    SSL Endpoint를 이용한 경우에는 엔드포인트를 지정해 줄 필요가 있습니다. 지금은 거의 사용할 기회가 없다고 생각합니다.
    htps : //에서 v 선 r. 헤로쿠. 코 m / r 치 c ぇs /

    인증서 준비


  • 인증서 + 중간 CA 인증서/etc/letsencrypt/live/<ドメイン名 (example.com)>/fullchain.pem
  • 비밀키/etc/letsencrypt/live/<ドメイン名 (example.com)>/privkey.pem

  • 사용합니다.
    certbot 를 이용하여 Let's Encrypt의 SSL 인증서를 만드는 방법은 이 사이트가 정중하고 이해하기 쉬웠습니다. Let's Encrypt 와일드카드 인증서를 얻는 방법 참고

    Heroku SSL에 인증서 업로드


    $ sudo heroku certs:update /etc/letsencrypt/live/example.com/fullchain.pem /etc/letsencrypt/live/example.com/privkey.pem --app sushi
    Resolving trust chain... done
     ▸    Potentially Destructive Action
     ▸    This command will change the certificate of endpoint example-1234 from ⬢ sushi.
     ▸    To proceed, type sushi or re-run this command with --confirm shushi
    
    > sushi
    Updating SSL certificate example-1234 for ⬢ sushi... done
    

    Heroku 명령 복습
  • 인증서 추가 certs:addheroku certs:add [証明書+中間CA証明書のファイルパス] [秘密鍵のファイルパス] --app [アプリ名]
  • 인증서 업데이트 certs:updateheroku certs:update [証明書+中間CA証明書のファイルパス] [秘密鍵のファイルパス] --app [アプリ名]

  • 마지막으로 적응했는지 확인


    $ curl -vI https://www.example.com
    * About to connect() to www.example.com port 443 (#0)
    *   Trying 50.16.234.21... connected
    * Connected to www.example.com (50.16.234.21) port 443 (#0)
    * SSLv3, TLS handshake, Client hello (1):
    * SSLv3, TLS handshake, Server hello (2):
    * SSLv3, TLS handshake, CERT (11):
    * SSLv3, TLS handshake, Server finished (14):
    * SSLv3, TLS handshake, Client key exchange (16):
    * SSLv3, TLS change cipher, Client hello (1):
    * SSLv3, TLS handshake, Finished (20):
    * SSLv3, TLS change cipher, Client hello (1):
    * SSLv3, TLS handshake, Finished (20):
    * SSL connection using AES256-SHA
    * Server certificate:
    *    subject: C=US; ST=CA; L=SF; O=SFDC; OU=Heroku; CN=www.example.com
    *    start date: 2011-11-01 17:18:11 GMT
    *    expire date: 2012-10-31 17:18:11 GMT
    *    common name: www.example.com (matched)
    *    issuer: C=US; ST=CA; L=SF; O=SFDC; OU=Heroku; CN=www.heroku.com
    *    SSL certificate verify ok.
    GET / HTTP/1.1
    User-Agent: curl/7.19.7 (universal-apple-darwin10.0) libcurl/7.19.7 OpenSSL/0.9.8r zlib/1.2.3
    Host: www.example.com
    Accept: */*
    
    SSL certificate verify ok 라고 기재되어 있으면, 성공입니다.

    curl 명령의 습관
  • HTTP 응답 헤더 검색( -I )$ curl -I http://www.example.com/
  • 상세를 로그 출력( -v 혹은 --verbose )$ curl -v http://www.example.com/

  • 실수하면 롤백이 제공됩니다.
    heroku certs:rollback --app sushi
    

    그건 그렇고



    Let's Encrypt 와일드카드 인증서를 얻는 방법 참고



    Let's Encrypt 와일드카드 인증서를 얻는 방법 참고 의 기사가 참고가 됩니다! !
    certbot 명령 실행(SSL 인증서 작성)
    $ certbot certonly --manual \
    --server https://acme-v02.api.letsencrypt.org/directory \
    --preferred-challenges dns \
    -d "*.example.com" -d example.com \
    -m [email protected] \
    --agree-tos \
    --manual-public-ip-logging-ok
    

    그렇게 하면 다음과 같이 DNS의 TXT 레코드를 수정하여 말하기 때문에 말한 것처럼 수정한다.
    Please deploy a DNS TXT record under the name
    _acme-challenge.example.com with the following value:
    
    R31KSgjQrbga7AH5_H6KdJLjD6-5JNp3KEIRVEotSw0
    
    Before continuing, verify the record is deployed.
    

    TTL은 적게 설정하는 것이 좋다고 생각합니다. 60라든지.

    DIG에서 TXT 레코드가 반영되었는지 확인


    $ dig -t TXT _acme-challenge.example.com
    
    #=>
    
    ; <<>> DiG 9.10.6 <<>> -t TXT _acme-challenge.example.com
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14090
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
    
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 512
    ;; QUESTION SECTION:
    ;_acme-challenge.example.com.   IN  TXT
    
    ;; ANSWER SECTION:
    _acme-challenge.example.com.    37 IN   TXT "R31KSgjQrbga7AH5_H6KdJLjD6-5JNp3KEIRVEotSw0"
    
    ;; Query time: 4 msec
    ;; SERVER: 61.122.116.147#53(61.122.116.147)
    ;; WHEN: Mon Sep 14 10:33:04 JST 2020
    ;; MSG SIZE  rcvd: 115
    

    좋은 웹페이지 즐겨찾기