Hướng dẫn xử lý sự cố: Caddy / Let’s Encrypt xác thực SSL thất bại
Sự cố
Việc tạo chứng chỉ SSL trong Caddy thất bại với cả hai thử thách ACME http-01 và tls-alpn-01.
Các lỗi sau xuất hiện trong nhật ký Caddy:
{
"level": "error",
"msg": "challenge failed",
"identifier": "test1.test.com",
"challenge_type": "http-01",
"problem": {
"type": "urn:ietf:params:acme:error:connection",
"detail": "103.67.236.210: Fetching http://test1.test.com/.well-known/acme-challenge/...: Connection reset by peer"
}
}
{
"level": "error",
"msg": "challenge failed",
"identifier": "test1.test.com",
"challenge_type": "tls-alpn-01",
"problem": {
"type": "urn:ietf:params:acme:error:connection",
"detail": "103.67.236.210: Connection reset by peer"
}
}
Dù có các lỗi này, Caddy vẫn tạo thành công một đơn ACME:
https://acme-staging-v02.api.letsencrypt.org/acme/order/262155913/31213094193
##Nguyên nhân
Các lần kết nối bị đặt lại cho thấy sự cố ở cấp mạng:
- Tường lửa hoặc WAF chặn kết nối đến trên cổng 80/443
- Cấu hình thử thách ACME thủ công ghi đè cơ chế xử lý ACME nội bộ của Caddy
- Các lần thử thất bại lặp lại có thể kích hoạt giới hạn tần suất của Let’s Encrypt (HTTP 429)
##Cách tạm thời / các bước xử lý
- Gỡ cấu hình thử thách ACME thủ công
Nếu Caddyfile của bạn có đoạn tương tự như sau:
@acme {
path /.well-known/acme-challenge/*
}
handle @acme {
reverse_proxy http://127.0.0.1:32773
}
tls {
issuer acme {
email dev@test.com
}
}
Hãy gỡ bỏ hoàn toàn và để Caddy tự động quản lý thử thách ACME.
- Đảm bảo tường lửa cho phép xác thực ACME
Let’s Encrypt phải kết nối được tới máy chủ của bạn trên cổng 80 và 443:
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -p tcp --dport 443 -j ACCEPT
iptables -I OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -I OUTPUT -p tcp --dport 443 -j ACCEPT
Đồng thời kiểm tra:
- Tường lửa của nhà cung cấp cloud / hosting
- Quy tắc WAF hoặc chống DDoS
- Khởi động lại Caddy
docker restart caddy
- Chờ ACME tự động thử lại
Caddy sẽ tự động thử cấp lại chứng chỉ sau khi sự cố mạng được khắc phục.
- Các cách tạm thời tuỳ chọn nếu chạm giới hạn tần suất:
- Chờ giới hạn của Let’s Encrypt được đặt lại
- Chuyển sang proxy Cloudflare
- Dùng ZeroSSL:
tls {
issuer acme {
ca https://acme.zerossl.com/v2/DV90
email admin@example.com
}
}
##Tắt WAF
Quy tắc ModSecurity không ảnh hưởng tới việc tạo SSL: Caddy tự động thử tạo SSL khi website được truy cập qua HTTPS, và việc này diễn ra trước khi yêu cầu được bất kỳ quy tắc WAF nào kiểm tra.
Tuy nhiên, bạn có thể tạm thời tắt mọi quy tắc - hoặc tắt hoàn toàn WAF bằng cách:
- Tắt mô-đun 'waf' tại HiTechAdmin > Cài đặt > Mô-đun
- Đổi tag image từ hitechcloud/caddy-coraza sang caddy:latest tại HiTechAdmin > Dịch vụ > Giới hạn dịch vụ > image CADDY.
- Dừng rồi khởi động lại web server tại HiTechAdmin > Dịch vụ > Trạng thái dịch vụ.
Hoặc dùng lệnh hitechcloudcli: hitechcloudcli waf disable
Lưu ý rằng bạn cũng cần gỡ các tên miền hiện có, hoặc sửa tệp của chúng để không còn phần # modsecurity nào: https://hitechcloud.org
Chúng tôi không khuyến nghị tắt WAF trừ khi bạn có một tường lửa khác - ví dụ khi dùng proxy và tường lửa Cloudflare cho mọi tên miền.
##Kiểm tra
Sau khi hoàn thành các bước trên:
- Kiểm tra nhật ký Caddy để xác nhận ACME cấp chứng chỉ thành công
- Xác nhận HTTPS hoạt động:
https://test1.test.com
Tuỳ chọn: kiểm tra chi tiết chứng chỉ bằng:
curl -v https://test1.test.com
##Ghi chú Tránh cấu hình thử thách ACME thủ công trừ khi thực sự cần thiết Đảm bảo thiết lập tường lửa và thiết lập phía nhà cung cấp không chặn các IP xác thực c ủa Let’s Encrypt