# 방화벽 뒤 IP에서 Let's Encrypt 실패

**URL:** https://meta.discourse.org/t/lets-encrypt-failing-for-ip-behind-firewall/267396
**Category:** Self-hosting
**Tags:** unsupported-install
**Created:** [6월 6, 2023, 2:23오후 UTC](https://meta.discourse.org/t/lets-encrypt-failing-for-ip-behind-firewall/267396 "2023-06-06T14:23:19Z")
**Posts on this page:** 9
**Page:** 1

<div class="post-metadata">

### Author: ![Qcloud1223](https://avatars.discourse-cdn.com/v4/letter/q/a183cd/32.png) [@Qcloud1223](https://meta.discourse.org/u/Qcloud1223)
#### Post date: [6월 6, 2023, 2:23오후 UTC](https://meta.discourse.org/t/lets-encrypt-failing-for-ip-behind-firewall/267396/1 "2023-06-06T14:23:20Z")

</div>

안녕하세요,

Discourse를 설치한 후 HTTP 502 오류가 발생하며, 로그에는 다음과 같은 내용이 표시됩니다:

```plaintext
$ sudo ./launcher logs app
x86_64 arch detected.
run-parts: executing /etc/runit/1.d/00-ensure-links
run-parts: executing /etc/runit/1.d/00-fix-var-logs
run-parts: executing /etc/runit/1.d/01-cleanup-web-pids
run-parts: executing /etc/runit/1.d/anacron
run-parts: executing /etc/runit/1.d/cleanup-pids
Cleaning stale PID files
run-parts: executing /etc/runit/1.d/copy-env
run-parts: executing /etc/runit/1.d/letsencrypt
[Tue 06 Jun 2023 01:51:07 PM UTC] Using CA: https://acme-v02.api.letsencrypt.org/directory
[Tue 06 Jun 2023 01:51:07 PM UTC] Create account key ok.
[Tue 06 Jun 2023 01:51:07 PM UTC] Registering account: https://acme-v02.api.letsencrypt.org/directory
[Tue 06 Jun 2023 01:51:09 PM UTC] Registered
[Tue 06 Jun 2023 01:51:09 PM UTC] ACCOUNT_THUMBPRINT='V5GxRKC8yO-5jvYjc3WlSSMbTABmaNtxUNs8XVoL1R8'
[Tue 06 Jun 2023 01:51:09 PM UTC] Creating domain key
[Tue 06 Jun 2023 01:51:10 PM UTC] The domain key is here: /shared/letsencrypt/<my domain>/<my domain>.key
[Tue 06 Jun 2023 01:51:10 PM UTC] Single domain='<my domain>'
[Tue 06 Jun 2023 01:51:10 PM UTC] Getting domain auth token for each domain
[Tue 06 Jun 2023 01:51:13 PM UTC] Getting webroot for domain='<my domain>'
[Tue 06 Jun 2023 01:51:13 PM UTC] Verifying: <my domain>
[Tue 06 Jun 2023 01:51:15 PM UTC] Pending, The CA is processing your order, please just wait. (1/30)
[Tue 06 Jun 2023 01:51:19 PM UTC] Pending, The CA is processing your order, please just wait. (2/30)
[Tue 06 Jun 2023 01:51:23 PM UTC] Pending, The CA is processing your order, please just wait. (3/30)
[Tue 06 Jun 2023 01:51:27 PM UTC] <my domain>:Verify error:202.117.43.203: Fetching http://<my domain>/.well-known/acme-challenge/UuD6jm6XJAaoXG7lE_IKfNVuHtqB4dokQXm-ll0bmrk: Timeout during connect (likely firewall problem)
[Tue 06 Jun 2023 01:51:27 PM UTC] Please check log file for more details: /shared/letsencrypt/acme.sh.log
Can't open ca.cer for reading, No such file or directory
140104391968064:error:02001002:system library:fopen:No such file or directory:../crypto/bio/bss_file.c:69:fopen('ca.cer','r')
140104391968064:error:2006D080:BIO routines:BIO_new_file:no such file:../crypto/bio/bss_file.c:76:
unable to load certificate
Error loading file /dev/fd/63

...
nginx: [emerg] cannot load certificate "/shared/ssl/ics.yhdang.top.cer": PEM_read_bio_X509_AUX() failed (SSL: error:0909006C:PEM routines:get_name:no start line:Expecting: TRUSTED CERTIFICATE)
nginx: [emerg] cannot load certificate "/shared/ssl/ics.yhdang.top.cer": PEM_read_bio_X509_AUX() failed (SSL: error:0909006C:PEM routines:get_name:no start line:Expecting: TRUSTED CERTIFICATE)
nginx: [emerg] cannot load certificate "/shared/ssl/ics.yhdang.top.cer": PEM_read_bio_X509_AUX() failed (SSL: error:0909006C:PEM routines:get_name:no start line:Expecting: TRUSTED CERTIFICATE)

```

이 문제는 Discourse가 자동으로 인증서를 생성하려고 시도하고, `HTTP` 모드를 통해 나열된 URL에 액세스하여 이를 검증하기 때문에 발생하는 것으로 추정됩니다. 그러나 제 IP는 기관의 방화벽 뒤에 있어 외부 IP의 액세스를 허용할 수 없으며, CA(인증 기관)도 마찬가지입니다.

또한 [Let’s Encrypt 웹사이트](https://letsencrypt.org/docs/challenge-types/)에서 HTTP가 사용 불가능한 경우 `DNS` 챌린지를 사용할 수 있다는 것을 알게 되었지만, Discourse 환경에서 이를 어떻게 수행해야 하는지 확실하지 않습니다.

도움 부탁드립니다.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [6월 6, 2023, 4:53오후 UTC](https://meta.discourse.org/t/lets-encrypt-failing-for-ip-behind-firewall/267396/2 "2023-06-06T16:53:07Z")

</div>

> [@Qcloud1223](#):
>
> Discourse가 자동으로 인증서를 생성하려고 하고, 나열된 URL에 접근하여 `HTTP` 모드를 통해 이를 검증하기 때문에 이러한 문제가 발생하는 것으로 추측합니다.

맞습니다.

Discourse-setup에서 연결할 수 없다는 경고 메시지를 받으셨을 것입니다.

> [@Qcloud1223](#):
>
> Discourse에서 이를 수행하는 방법을 잘 모르겠습니다.

지원되지 않습니다. 방화벽 뒤에 실행하려는 경우 인증서를 얻기 위한 다른 방법을 찾아야 합니다. [Allow SSL / HTTPS for your Discourse Docker setup](https://meta.discourse.org/t/allow-ssl-https-for-your-discourse-docker-setup/13847)를 참고할 수 있습니다.

---

<div class="post-metadata">

### Author: ![Qcloud1223](https://avatars.discourse-cdn.com/v4/letter/q/a183cd/32.png) [@Qcloud1223](https://meta.discourse.org/u/Qcloud1223)
#### Post date: [6월 7, 2023, 8:20오전 UTC](https://meta.discourse.org/t/lets-encrypt-failing-for-ip-behind-firewall/267396/3 "2023-06-07T08:20:29Z")

</div>

안녕하세요 @pfaffman, 정보를 주셔서 정말 감사합니다! 해당 게시물의 지시에 따라 드디어 Discourse 환영 페이지가 표시됩니다.

남은 사소한 문제가 하나 있습니다. 저는 origin 서버의 인증서를 생성하기 위해 Cloudflare를 사용하고 있습니다. 하지만 브라우저에서 해당 페이지에 액세스하려고 하면 `NET::ERR_CERT_AUTHORITY_INVALID` 경고가 표시됩니다(무시하고 진행할 수는 있지만, 제 사용자들은 아마도 그렇게 하기를 원하지 않을 것입니다).

이 문제가 Discourse와 관련이 있는지 궁금하고, 이 문제를 실제로 디버깅하는 방법에 대해 알고 싶습니다. 감사합니다.

---

<div class="post-metadata">

### Author: ![Qcloud1223](https://avatars.discourse-cdn.com/v4/letter/q/a183cd/32.png) [@Qcloud1223](https://meta.discourse.org/u/Qcloud1223)
#### Post date: [6월 7, 2023, 9:02오전 UTC](https://meta.discourse.org/t/lets-encrypt-failing-for-ip-behind-firewall/267396/4 "2023-06-07T09:02:27Z")

</div>

또한, `sshd.template.yml`가 비추천(deprecated) 상태이므로, `ssl_certificate`와 `ssl_certificate_key`를 `/shared/ssl/ssh.crt`와 `/shared/ssl/ssh.key`로 변경하기 위해 `/etc/nginx/conf.d/discourse..conf` 파일을 수동으로 편집해야 합니다. (기본값은 `/shared/ssl/<domain name>.cer`입니다.) 이렇게 하지 않으면 인증서 문제로 인해 nginx가 작동하지 않으며, 다음과 같은 오류를 출력합니다:

```plaintext
[emerg] 5834#5834: cannot load certificate "/shared/ssl/<domain name>.cer": PEM_read_bio_X509_AUX() failed (SSL: error:0909006C:PEM routines:get_name:no start line:Expecting: TRUSTED CERTIFICATE)

```

이 부분이 문제를 일으키는 원인이 될 것 같다고 생각합니다.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [6월 7, 2023, 10:03오전 UTC](https://meta.discourse.org/t/lets-encrypt-failing-for-ip-behind-firewall/267396/5 "2023-06-07T10:03:01Z")

</div>

sshd 템플릿은 필요하지 않으므로 해당 참조를 제거해야 합니다.

nginx 설정에 올바른 정보를 입력하기 위해 다른 권장된 줄만 수정하면 됩니다.

인증서가 유효하지 않다는 오류가 발생한다면, 이것이 원인이 될 가능성이 높습니다. 유효한 인증서가 필요합니다.

---

<div class="post-metadata">

### Author: ![Simon\_Manning](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simon_manning/32/198596_2.png) [@Simon\_Manning](https://meta.discourse.org/u/Simon_Manning)
#### Post date: [6월 7, 2023, 11:10오전 UTC](https://meta.discourse.org/t/lets-encrypt-failing-for-ip-behind-firewall/267396/6 "2023-06-07T11:10:33Z")

</div>

> [@Qcloud1223](#):
>
> 또한, `sshd.template.yml`가 비추천(deprecated)되었기 때문에 `ssl_certificate`와 `ssl_certificate_key`를 `/shared/ssl/ssh.crt`와 `/shared/ssl/ssh.key`로 변경하기 위해 `/etc/nginx/conf.d/discourse..conf` 파일을 수동으로 편집해야 합니다. (기본 값은 `/shared/ssl/<도메인 이름>.cer`입니다.)

`web.ssl` 템플릿(그리고 `web.letsencrypt.ssl` 템플릿은 **아닙니다** )만 사용하면 됩니다. 샘플 yml 파일에는 다음 줄들이 포함되어 있습니다:

```plaintext
  ## Lets Encrypt(https)를 추가하려면 이 두 줄의 주석을 해제하세요
  #- "templates/web.ssl.template.yml"
  #- "templates/web.letsencrypt.ssl.template.yml"

```

첫 번째 줄의 주석만 해제하면 됩니다:

```plaintext
  ## Lets Encrypt(https)를 추가하려면 이 두 줄의 주석을 해제하세요
  - "templates/web.ssl.template.yml"
  #- "templates/web.letsencrypt.ssl.template.yml"

```

이렇게 하면 nginx가 `/shared/ssl/ssl.crt`와 `/shared/ssl/ssl.key`를 사용하여 SSL을 설정합니다. 그러면 해당 경로에 유효한 인증서와 키가 있는지 확인하면 됩니다. 표준 위치에 설치한 경우, 호스트 시스템에서 해당 디렉토리의 경로는 `/var/discourse/shared/standalone/ssl/`입니다.

---

<div class="post-metadata">

### Author: ![Qcloud1223](https://avatars.discourse-cdn.com/v4/letter/q/a183cd/32.png) [@Qcloud1223](https://meta.discourse.org/u/Qcloud1223)
#### Post date: [6월 7, 2023, 12:31오후 UTC](https://meta.discourse.org/t/lets-encrypt-failing-for-ip-behind-firewall/267396/7 "2023-06-07T12:31:59Z")

</div>

제이와 시몬, 감사합니다. 제 문제는 해결되었습니다.

결국 클라우드플레어의 인증서가 문제였다는 것을 알게 되었습니다. Let’s Encrypt의 DNS 챌린지로 전환하니 완벽하게 작동합니다.

이제 Discourse가 내부적으로 어떻게 작동하는지에 대해 조금 더 알게 되었습니다. 멋지네요!

–  
추가: 참고로, 설정 과정에서 사용자가 인증서를 생성하는 방식을 선택할 수 있도록 하는 것이 가능한가요? 저 같은 초보자들은 실제로 로그를 읽고 찾아봐야만 인증서가 연결 실패의 원인임을 알 수 있었습니다.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [6월 7, 2023, 2:33오후 UTC](https://meta.discourse.org/t/lets-encrypt-failing-for-ip-behind-firewall/267396/8 "2023-06-07T14:33:14Z")

</div>

> [@Qcloud1223](#):
>
> 설정 과정에서 사용자가 인증서를 생성하는 방식을 선택할 수 있도록 할 수 있나요?

아니요. 설정은 (대부분의 경우) 항상 작동하는 하나의 간단한 설치 방식을 위해 설계되었습니다. 공개 웹에서 접근을 허용하지 않는 방화벽 뒤에 설치하는 구성은 지원하기 어려운 환경입니다.

해결되었다니 다행입니다!

---

<div class="post-metadata">

### Author: ![system](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/system/32/443519_2.png) [@system](https://meta.discourse.org/u/system)
#### Post date: [7월 7, 2023, 2:33오후 UTC](https://meta.discourse.org/t/lets-encrypt-failing-for-ip-behind-firewall/267396/9 "2023-07-07T14:33:22Z")

</div>

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.
