한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

Sách trắng lag game › L13 Kiến trúc và vận hành server

Chứng chỉ TLS hết hạn hoặc cấu hình sai TLS certificate expiry / misconfiguration

ID nguyên nhân in-cert · Phụ trách chính Hạ tầng mạng (Đội hạ tầng) · Phối hợp Hạ tầng server (Đội hạ tầng), Phát triển client (Đội phát triển game)

Mở thẻ gốc có hình minh họa và thí nghiệm →

Khi chứng chỉ của server đăng nhập, API hoặc server patch hết hạn hoặc thiếu chứng chỉ trung gian, kết nối TLS của các client kết nối mới sẽ thất bại kể từ thời điểm đó.

Vì sao Chứng chỉ đã quá hạn hiệu lực, server gửi thiếu chứng chỉ trung gian, hoặc ngày giờ trên thiết bị của người chơi bị sai → Dẫn đến Client xác minh chứng chỉ thất bại và cắt kết nối TLS → Trên màn hình Không vào được, kẹt loading ở bước đăng nhập hoặc patch, chỉ các tính năng HTTPS như cửa hàng bị lỗi. Người đã vào game từ trước thường vẫn bình thường

Triệu chứng
Không vào được·kẹt loading, Nuốt thao tác·rollback
Yếu tố
Ngưng trệ
Ai gặp phải
Cả server, Chỉ một tính năng, Chỉ mình tôi
Khi nào
Ngay sau đăng nhập hoặc bảo trì, Khi làm một thao tác nhất định
Phụ trách
Phụ trách chính Hạ tầng mạng (Đội hạ tầng) · Phối hợp Hạ tầng server (Đội hạ tầng), Phát triển client (Đội phát triển game)
Việc cần làm (Đội phát triển game)
Ghi lỗi chứng chỉ bằng mã lỗi riêng, tách khỏi các lỗi kết nối khác, kèm hướng dẫn; nếu do sai ngày thì hướng dẫn người chơi bật tự động đặt ngày giờ trên thiết bị; nếu dùng certificate pinning thì nhúng kèm khóa dự phòng và thống nhất lịch thay chứng chỉ với đội hạ tầng.
Việc cần làm (Đội hạ tầng)
Mạng: nếu kết thúc TLS ở bộ cân bằng tải hoặc CDN thì cảnh báo trạng thái tự động gia hạn và số ngày còn lại của chứng chỉ được quản lý (ACM là DaysToExpiry), giữ nguyên bản ghi DNS dùng để xác minh. Thiết bị server·OS: nếu kết thúc TLS trên server thì tự động hóa việc gia hạn và đọc lại cấu hình sau khi gia hạn, cấu hình chuỗi chứng chỉ có cả chứng chỉ trung gian, định kỳ kiểm tra từ bên ngoài thời hạn còn lại của từng địa chỉ đăng nhập, API, patch rồi cảnh báo.
Con số tham khảo
Chứng chỉ Let’s Encrypt có hạn 90 ngày nên được khuyến nghị gia hạn mỗi 60 ngày, còn AWS Certificate Manager kiểm tra chứng chỉ đã xác minh bằng DNS từ 45 ngày trước khi hết hạn rồi tự động gia hạn. Nếu việc tự động gia hạn thất bại âm thầm, đúng thời điểm hết hạn mọi kết nối mới sẽ bị chặn cùng một lúc.
Trên đồ thị
Rớt kết nối hàng loạt · Số lần đăng nhập thành công, số lỗi TLS handshake
Chỗ cần xem
Dùng openssl s_client -connect HOST:443 -showcerts để xem danh sách chứng chỉ server thực sự gửi, rồi kiểm tra ngày hết hạn (notAfter) của từng chứng chỉ bằng openssl x509 -noout -enddate. Nếu kết thúc TLS ở bộ cân bằng tải: số lỗi thương lượng TLS (AWS ALB, NLB là ClientTLSNegotiationErrorCount) và số lần đăng nhập thành công
Đúng nếu
ngày hết hạn đã qua hoặc danh sách server gửi thiếu chứng chỉ trung gian, và thời điểm lỗi bắt đầu tăng trùng với lúc hết hạn hoặc lúc thay chứng chỉ
Loại trừ nếu
danh sách chứng chỉ và ngày hết hạn bình thường nhưng chỉ một số người chơi thất bại → xem ngày giờ trên thiết bị của những người đó hoặc danh sách chứng chỉ gốc của OS cũ
Cách kiểm tra
Kiểm tra bằng công cụ hạ tầng (không cần code game)
Tìm hiểu thêm
Cấu hình thiếu chứng chỉ trung gian có thể trông vẫn bình thường khi mở bằng trình duyệt trên PC. Trình duyệt nhớ các chứng chỉ trung gian đã nhận từ trang khác để bù vào chỗ thiếu, nhưng những client không có bộ nhớ như vậy, chẳng hạn ứng dụng Android, sẽ thất bại. Thời hạn hiệu lực cũng đang ngắn lại. Let’s Encrypt dự kiến rút thời hạn mặc định xuống 64 ngày vào năm 2027 và 45 ngày vào năm 2028, nên cấu hình cố định gia hạn mỗi 60 ngày chỉ còn dư 4 ngày với chứng chỉ 64 ngày, và sẽ để chứng chỉ 45 ngày hết hạn trước khi kịp gia hạn. AWS Certificate Manager cũng không tự động gia hạn chứng chỉ được nhập vào (import), và nếu xóa bản ghi DNS dùng để xác minh thì việc gia hạn sẽ thất bại. Biểu hiện không đăng nhập được trông giống “DNS lỗi hoặc chậm”, nhưng lỗi chứng chỉ xảy ra ở bước TLS handshake sau khi đã tìm được địa chỉ server, và thời điểm bắt đầu trùng với lúc chứng chỉ hết hạn hoặc lúc thay chứng chỉ.

Nguồn

  1. RFC 5280: Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile IETF
    Thời hạn hiệu lực của chứng chỉ tính từ notBefore đến notAfter; khi xác minh đường dẫn, từng chứng chỉ trong chuỗi đều được kiểm tra xem thời điểm hiện tại có nằm trong thời hạn không (đồng hồ của bên xác minh sai thì thất bại)
  2. FAQ Let's Encrypt
    Thời hạn chứng chỉ mặc định 90 ngày, khuyến nghị gia hạn mỗi 60 ngày
  3. Decreasing Certificate Lifetimes to 45 Days Let's Encrypt
    Rút thời hạn mặc định xuống 64 ngày vào tháng 2 năm 2027 và 45 ngày vào tháng 2 năm 2028; gia hạn theo khoảng cố định 60 ngày không còn đủ nên khuyến nghị gia hạn ở khoảng 2/3 thời hạn
  4. Renewal for domains validated by DNS AWS
    Từ 45 ngày trước khi hết hạn, kiểm tra chứng chỉ có đang được dùng trong service AWS không và bản ghi CNAME dùng để xác minh còn không, rồi tự động gia hạn; nếu không xác minh được thì gửi thông báo ở các mốc 30 ngày, 15 ngày, 7 ngày, 3 ngày và 1 ngày trước khi hết hạn
  5. Managed certificate renewal in AWS Certificate Manager AWS
    Chứng chỉ được nhập vào (import) và chứng chỉ đã hết hạn không thuộc diện tự động gia hạn
  6. Supported CloudWatch metrics AWS
    DaysToExpiry: số ngày còn lại đến khi chứng chỉ hết hạn, được công bố hai lần mỗi ngày cho đến khi hết hạn
  7. Security with network protocols Android (Google)
    Nếu server gửi thiếu chứng chỉ trung gian, ứng dụng Android thất bại với SSLHandshakeException, nhưng trình duyệt trên PC có thể bù bằng chứng chỉ trung gian đã nhận từ trước nên không báo lỗi; dùng openssl s_client để kiểm tra chuỗi server gửi
  8. Network security configuration Android (Google)
    Nếu dùng certificate pinning thì phải nhúng kèm khóa dự phòng để phòng khi thay khóa hoặc đổi CA; nếu không, kết nối sẽ bị cắt cho đến khi cập nhật ứng dụng
  9. openssl-s_client OpenSSL
    -showcerts: hiển thị danh sách chứng chỉ đúng theo thứ tự server gửi (đây chưa phải chuỗi đã được xác minh)
  10. openssl-x509 OpenSSL
    -enddate: in ra ngày hết hạn của chứng chỉ (notAfter), -checkend: kiểm tra chứng chỉ có hết hạn trong số giây chỉ định không
  11. CloudWatch metrics for your Application Load Balancer AWS
    ClientTLSNegotiationErrorCount: số kết nối không thiết lập được phiên TLS, chẳng hạn khi client xác minh chứng chỉ server thất bại rồi cắt kết nối
  12. CloudWatch metrics for your Network Load Balancer AWS
    ClientTLSNegotiationErrorCount: số TLS handshake thương lượng thất bại giữa client và TLS listener

Nguyên nhân nên xem cùng

Cùng tầng: L13 Kiến trúc và vận hành server

Nguyên nhân ở tầng khác gây cùng triệu chứng (Không vào được·kẹt loading)

Xem thẻ gốc có hình minh họa và thí nghiệm