수정: 버그로 변경합니다. Force_https가 이전에 켜져 있던 사이트에서 이제 꺼져 있고, 이로 인해 문제가 발생합니다.
"업로드가 작동하지 않는다"는 문제를 겪고 있는 사이트를 디버깅하느라 한동안 시간을 보냈습니다. rebuild, safe-mode, 비표준 플러그인 검토 등 명백한 사항들을 하나씩 점검한 끝에 마침내 혼합 콘텐츠(mixed-content) 경고를 발견하고 force_https를 켜니 문제가 해결되었습니다.
1~2년 전쯤 force_https가 기본적으로 켜져 있다고 생각했는데, 최근 몇 차례 force_https가 켜져 있지 않아 문제가 발생했다는 이야기를 들었습니다(혹은 직접 확인했습니다).
기본적으로 켜져 있지 않은 이유가 있을까요?
[/quote]
"업로드가 작동하지 않는다"는 문제를 겪고 있는 사이트를 디버깅하느라 한동안 시간을 보냈습니다. rebuild, safe-mode, 비표준 플러그인 검토 등 명백한 사항들을 하나씩 점검한 끝에 마침내 혼합 콘텐츠(mixed-content) 경고를 발견하고 force_https를 켜니 문제가 해결되었습니다.
1~2년 전쯤 force_https가 기본적으로 켜져 있다고 생각했는데, 최근 몇 차례 force_https가 켜져 있지 않아 문제가 발생했다는 이야기를 들었습니다(혹은 직접 확인했습니다).
# openssl verify -CAfile ca.cer fullchain.cer
O = Digital Signature Trust Co., CN = DST Root CA X3
error 10 at 3 depth lookup: certificate has expired
error fullchain.cer: verification failed
그런 다음 /etc/ca-certificates.conf에서 mozilla/DST_Root_CA_X3.crt를 제거하고 update-ca-certificates를 실행하면 다음 결과가 나옵니다:
C = US, O = Internet Security Research Group, CN = ISRG Root X1
error 2 at 2 depth lookup: unable to get issuer certificate
error fullchain.cer: verification failed
브라우저에서는 정상적으로 표시됩니다. 그리고 오늘 이 컨테이너를 다시 빌드했기 때문에(최신 루트 인증서가 있어야 합니다).
인증서 관련 지식이 부족해서 정확히 무슨 일이 일어나고 있는지 알 수 없습니다. 컨테이너 내부에서 Let’s Encrypt 인증서를 curl로 가져올 수 있습니다(지난주 작업하던 WordPress 컨테이너에서는 실패하던 테스트입니다).
아니, 정말. Rails와 Ansible, Python 사이의 복잡한 문제인 줄 알고 이틀 동안 디버깅을 했더니, 결국 예전에는 force_https가 켜져 있던 서버가 이제 꺼져 있어서, 요청이 https://myserver 대신 http://myserver로 보내진 거였어요.
지난주 포럼을 다른 서버로 이전하던 중 LetsEncrypt 재발행 한도(같은 호스트네임당 주당 최대 5회)에 도달하는 문제가 발생했습니다. 처음에는 그 이유가 무엇인지 알지 못했지만, 이 버그로 인해 빌드될 때마다 인증서가 재발행되었고, 5회 이후에 속도 제한(rate limit)에 걸렸습니다. 이전 인증서가 여전히 서버에 남아 있었기 때문에 어떤 경고도 울리지 않았습니다.
포럼을 새 서버로 옮길 때까지는 문제없었습니다. 하지만 그때 새로운 인증서를 받지 못했습니다. 이전 서버에서 복사해 올 수는 있었지만, 그 원인이 무엇인지 우리는 깨닫지 못했습니다.