재빌드 여러 번 한 후 SSL 문제 발생

3번째 연속 게시글… 게시글을 수정하면 새 댓글에 표시되지 않는 것 같아서요.

말씀하신 모든 것을 해봤습니다. 모든 것을 가져왔고, 가져오기를 중지했으며, 앱을 시작했습니다. 하지만 여전히 제 사이트에 연결할 수 없어요 :frowning:

파이어폭스에서는 이렇게 표시됩니다: “음. 해당 사이트를 찾을 수 없습니다. [my discourse site]의 서버에 연결할 수 없습니다.”

…누군가 답을 알고 있기를 바라며 손가락을 오므려봅니다

정보량이 이렇게 적으면 답변을 드리기 어렵습니다. 현재까지 알 수 있는 것은 여러분의 사이트가 접근할 수 없다는 사실뿐입니다.

  • 로그를 확인해 보셨나요? 어떤 내용이 나와 있나요?
  • 앱을 시작한 후 몇 분 정도 더 기다려 보셨나요? 사이트가 접근 가능해질 때까지 시간이 좀 걸릴 수 있습니다.

여기서 여러분의 사례와 관련된 게시글이 상당히 많으니, 이 문제는 임포터와 부분적으로만 관련이 있는 것으로 보이므로 별도의 주제로 나누시는 것이 좋을 것 같습니다.

헬미님, 답변 주셔서 감사합니다. 네, 이 내용은 다른 주제에 속할 수도 있다는 데 동의합니다. 하지만 문제가 임포트할 때부터 시작되었기 때문에 일단 여기에 올려보았습니다.

질문하신 사항에 대해 말씀드리면, 저는 DO 드롭렛에 디스코스를 직접 설치했습니다. 처음에는 모든 것이 잘 작동했고, 이미 임포트도 완료한 상태였습니다. 하지만 이모지 경로를 설정하는 것을 잊어버렸기 때문에 모든 것을 지우고 완전히 새로 임포트해야 했습니다. 그 이후로 문제가 시작되었습니다.

임포트를 하기 전에 모든 설정(테마 등)의 백업을 복원하기 위해 보드에 한 번 접속할 수 있었습니다. 하지만 이모지 위치를 잘못 지정하는 실수를 저질러 임포트를 중단해야 했고, 처음부터 다시 시작해야 했습니다. 그래서 다시 모든 것을 지우고 재임포트했습니다(그렇게 생각했습니다).

하지만 그 이후로는 사이트에 접속할 수 없습니다. 디스코스 닥터는 제 디스코스 버전을 찾을 수 없다는 것을 제외하고는 모든 것이 정상이라고 말합니다. 로그와 관련해서는 확인하는 명령어를 알려주시면 제가 확인하겠습니다. 네, 기다리고, 기다리고, 또 기다렸지만… 여전히 접속이 되지 않습니다.

이 문제를 해결하기 위해 어디를 봐야 할지 정말 막막합니다. 혹시 아이디어가 있으시면 알려주세요 :slight_smile:

수정: 로그를 확인하는 방법을 찾았습니다… 그런데 SSL 오류로 가득 차 있네요. 그래서 지금 이 링크(Set up HTTPS support with Let's Encrypt)를 통해 새로운 인증서를 재설치하고 있습니다. 정말로 이번에는 해결되기를 바랍니다.

SSL 오류는 대개 Let’s Encrypt 인증서를 너무 자주 요청했기 때문일 가능성이 높습니다. 도메인이 Let’s Encrypt에서 일시적으로 차단되었을 수 있습니다. 자세히 확인해 보시고, 차단된 상태라면 이 문제를 우회하기 위해 당분간 서브도메인을 사용하는 것을 고려해 보세요.

나머지 사항에 대해 말씀드리자면, DigitalOcean(DO)을 사용 중이시라면 문제가 발생했을 때 되돌아갈 수 있는 단계에 도달할 때마다 DO 스냅샷을 찍어 두는 것이 좋습니다.

스냅샷에 대한 팁 정말 감사합니다. 다음에 꼭 참고하겠습니다!

그리고 제가 만든 백업에서 SSL 디렉토리를 복원해서 문제를 해결했습니다. 알고 보니 어찌된 일인지 인증서가 0kb 파일로 바뀌어 있었네요? 이상하네요. 이전 파일로 복원하니 접속이 가능해졌습니다.

도와주신 모든 분께 감사합니다. 그리고 제 이전 게시물들은 지원/SSL 또는 비슷한 카테고리에 더 적합했을 것 같습니다 (게시할 당시에는 몰랐습니다).)

수정: 업데이트, 앱을 다시 빌드한 후 SSL이 어딘가에서 삭제되는 것 같습니다. 매번 다시 빌드할 때마다 LE 인증서를 요청하는 건가요? 그렇다면 제가 너무 자주 요청한 것으로 인식되어서 그런 것일 수 있겠네요. 무엇이 문제인지 알아보기 위해 너무 많이 다시 빌드했습니다.

아니요. 제가 아는 한, 갱신 날짜를 확인하고 필요할 때 갱신합니다.

아마도 7일 동안 5개의 인증서를 발급받을 수 있는 것 같습니다:

그 오류 중 하나는 도메인 이름이 올바른 IP 주소로 설정되어 있지 않은 것처럼 보입니다.

JahDu님, 감사합니다. 그렇다면 재빌드 이후 SSL 키가 제대로 설정되지 않는 것이 더 이상하게 느껴집니다.

@Jay님, 이전에는 같은 IP와 모든 설정으로 잘 작동했기 때문에 이상합니다. 도메인은 올바른 IP로 지정되어 있습니다.

Discourse는 제 메인 도메인의 서브도메인으로 구성되어 있으며, 둘은 서로 다른 서버에 있습니다. 서브도메인은 메인 도메인과 다른 IP를 가지고 있었습니다. 하지만 SSL 설정에는 서브도메인이 입력되어 있습니다.

app.yml을 다시 확인해 보겠습니다만, 현재 (플러그인이 작동하도록) 10만 개의 포스트를 재베이킹(rebaking)하는 중이라 시간이 좀 걸립니다 …

수정: app.yml을 다시 확인해 보았지만, 모든 것이 정상 작동하던 시점 이후로 변경된 것이 없습니다.
이제 어디를 확인해야 하나요?

방금 다시 가져오기를 한 번 더 수행했습니다. 이번에는 앱을 다시 빌드하지 않았습니다. 백업을 복원한 후 phpbb3 데이터베이스를 가져왔습니다. 가져오기 후에도 SSL 키가 다시 엉망이 되었습니다. 아무것도 다시 빌드하지 않았고, app.yml과 import.yml 컨테이너를 시작하고 중지한 것뿐입니다.

정말 막막합니다. 관리자 CP를 통해 백업을 복원하면 SSL이 손상되나요? 가져오기 후까지 SSL 디렉토리를 확인하지 않아서 언제 문제가 발생했는지 알 수 없습니다.

이 문제를 해결해 줄 수 있는 분은 없을까요?

SSL 관련 오류에 대해 로그에서 확인된 세부 사항이 있나요? 제 추측은 여전히 도메인이 Let’s Encrypt에 의해 차단되고 있다는 것입니다. 하지만 로그의 세부 사항이 없으면 정확히 판단하기 어렵습니다.

문제는 SSL 디렉터리 내 파일들이 어떻게든 덮어쓰기되어 .key 또는 .cer 파일이 원래 있어야 할 3KB가 아닌 0KB가 되는 것입니다. 모든 파일이 '손상’되는 것이 아니라, 그중 1~2개만 0KB가 됩니다. 저는 백업된 파일을 다시 복사해 넣는 방식으로 해결하지만, 이는 임시 해결책에 불과합니다.

(파일을 수정하기 전의) 로그에는 다음과 같은 오류가 반복적으로 나타납니다:

nginx: [emerg] cannot load certificate “/shared/ssl/[mydomain]_ecc.cer”: BIO_new_file() failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen(‘/shared/ssl/[domain]_ecc.cer’,‘r’) error:2006D080:BIO routines:BIO_new_file:no such file)
nginx: [emerg] cannot load certificate “/shared/ssl/[domain]_ecc.cer”: PEM_read_bio_X509_AUX() failed (SSL: error:0909006C:PEM routines:get_name:no start line:Expecting: TRUSTED CERTIFICATE)

컨테이너 내부의 /shared/letsencrypt/acme.sh.log 파일을 확인하여 무슨 일이 일어나고 있는지 알아보세요.

아, 거기에 로그도 있다는 걸 몰랐어요 :slight_smile: 알려주셔서 감사합니다!

거기서 꽤 많은 일이 일어나고 있네요. 재빌드할 때마다 인증서를 갱신하고 있었던 것 같아요? 갱신 관련 작업이 꽤 많이 보이거든요. 그리고 @helmi 님이 맞다고 생각해요. 말씀하신 게 이거인 것 같아요:

[Sat 25 Jan 2020 06:48:31 PM UTC] Create new order error. Le_OrderFinalize not found. {
“type”: “urn:ietf:params:acme:error:rateLimited”,
“detail”: "Error creating new order :: too many certificates already issued for exact set of domains: $
“status”: 429

그러면… 이걸 어떻게 넘겨야 할까요?

수정: Let’s Encrypt에 따르면:

속도 제한(rate limit)에 도달한 경우, 이를 일시적으로 리셋할 방법이 없습니다. 일주일 후 속도 제한이 만료될 때까지 기다려야 합니다.

그리고 Rate Limits - Let's Encrypt 도 찾아봤어요.

그러니까… 결국 일주일 정도 기다려야 할 것 같은데요…

수정2: https://crt.sh/ 에서 확인해보니 지난 일주일 동안 인증서가 10개밖에 안 보이네요? 50개는 아니에요…

질문: 인증서가 갱신으로 간주되는 시점은 언제인가요? 앱 재빌드할 때만 그런 거겠죠?

혼합 대소문자 호스트네임을 사용 중이신가요? 코드가 이제 소문자로 변환한다고 생각했지만, 제 추측일 뿐입니다. 유효한 인증서가 있는 경우 재빌드 시 새로운 인증서를 요청하지 않는다고 확신합니다.

app.yml의 DISCOURSE_HOSTNAME에서 정의된 것을 말씀하시는 건가요?
아니요, 전부 소문자입니다.

그 한도에 도달하게 되는 경우를 제가 아는 한, 인증서 요청이 어떤 이유로든 실패했을 때뿐입니다.

감사합니다 :slight_smile: 실패 여부를 어디서 확인하면 될까요? 로그에서 찾아봐야 할 오류를 아시나요?

LetsEncrypt 포럼에 접속하여 Help(도움말) 카테고리에 새 주제를 생성하고, 제시되는 양식을 작성하면 도메인을 확인하여 문제가 있는지, 있다면 어떤 문제인지 알려줄 수 있습니다. 또한 문제 해결을 돕기도 합니다.
참고로, LE에서는 프로덕션 모드에서 발생하는 인증서 제한에 걸리지 않도록 “staging” 모드를 사용할 것을 권장합니다. 실패 시도는 5회까지 가능하며, 1시간 후 제한이 초기화됩니다. :wink:

짐, 감사합니다. 에러가 다시 발생하면 그렇게 하겠습니다.
방금 다시 빌드를 해봤는데, 놀랍게도 SSL 오류가 없었습니다!