차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

let_s_encrypt_certbot_ssl_with_haproxy [2019/12/02 13:26] (현재)
koov 만듦
줄 1: 줄 1:
 +====== Let's Encrypt(CertBot) SSL with HAProxy ======
 +
 +''​Let'​s Encrypt''​에서 제공하는 ''​Certbot''​을 이용한 SSL사용하는경우가 많다. 매우 편리하게 SSL인증서를 발급받아 사용할수 있어 많은 곳에서 사용중이다.
 +다만 ''​HAProxy''​ 를 사용하는 경우 발급/​갱신시 ''​haproxy''​로 인해 바로 처리가 되지 않는 상황이 있을수 있는데 이경우 아래와 같이 해결하도록 한다.
 +
 +===== HAProxy 설정 =====
 +새 인증서를 요청하면 LetsEncrypt가 인증 파일 (URI: ''/​.well-known/​acme-challenge/​random-hash-here''​)을 요청합니다. 인증서 설정이 아직 없기 때문에 이 요청은 포트 80을 통해 발생합니다.
 +
 +만약 HAProxy가 포트 443에서 수신 대기 중이면 ''​LetsEncrypt''​가 해당 포트에 대해 권한 부여를 시도 할 수 있습니다.(80포트를 사용하지 않기 때문에) 따라서 새 인증서를 만들 때 포트 80에서만 수신 대기하는 HAProxy가 필요합니다.
 +
 +또 다른 문제 : HAProxy가 포트 80에서 수신 대기 중입니다. 그러나 권한 부여 요청을 수신하도록 독립형 서버를 설정하려면 LetsEncrypt가 필요합니다. 기본적으로 포트 80도 설정되어 한 번에 하나의 프로세스 만 포트에서 수신 할 수 있으므로 충돌이 발생합니다. 따라서 다른 포트에서 수신하도록 LetsEncrypt에 알려야합니다!
 +
 +HAProxy 내에서 들어오는 HTTP 요청에 ''/​.well-known/​acme-challenge''​ 문자열이 포함되어 있는지 물어볼 수 있습니다. 아래 구성에서 HAProxy가 요청에 해당 URI가 포함되어 있음을 확인하면 요청을 LetsEncrypt로 라우팅합니다. 그렇지 않으면 요청이 정상적으로로드 밸런서 회전의 서버로 라우팅됩니다.
 +
 +<WRAP prewrap>
 +<code vim>
 +# The frontend only listens on port 80
 +# If it detects a LetsEncrypt request, is uses the LE backend
 +# Else it goes to the default backend for the web servers
 +frontend fe-scalinglaravel
 +    bind *:80
 +
 +    # Test URI to see if its a letsencrypt request
 +    acl letsencrypt-acl path_beg /​.well-known/​acme-challenge/​
 +    use_backend letsencrypt-backend if letsencrypt-acl
 +
 +    default_backend be-scalinglaravel
 +
 +# LE Backend
 +backend letsencrypt-backend
 +    server letsencrypt 127.0.0.1:​8888
 +
 +# Normal (default) Backend
 +# for web app servers
 +backend be-scalinglaravel
 +    # Config omitted here
 +</​code>​
 +</​WRAP>​
 +HAProxy 내에서 설정 한 후에는 다시로드 ( sudo service haproxy reload) 한 다음 LetsEncrypt 실행으로 넘어갈 수 있습니다.
 +
 +===== 새로운 인증서 =====
 +LetsEncrypt에서 새 인증서를 가져 오는 명령은 다음과 같습니다.
 +
 +<WRAP prewrap>
 +<code bash>
 +sudo certbot certonly --standalone -d demo.scalinglaravel.com \
 +    --non-interactive --agree-tos --email admin@example.com \
 +    --http-01-port=8888
 +</​code>​
 +</​WRAP>​
 +
 +''​http-01-port=8888''​ 옵션을 사용함으로 인해서 이후 갱신시에도 certbot이 8888로 수신 대기 상태를 시도합니다.
 +
  
  • let_s_encrypt_certbot_ssl_with_haproxy.txt
  • 마지막으로 수정됨: 2019/12/02 13:26
  • 저자 koov