Chuyển tới nội dung chính
Version: 4.1

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ý

  1. 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.

  1. Đả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
  1. Khởi động lại Caddy

docker restart caddy

  1. 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.

  1. 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