Ý nghĩa thực sự của lỗi này
Bạn đang cố gắng tải một trang web qua HTTPS, nhưng Firefox gặp trở ngại và hiển thị thông báo lỗi kết nối bảo mật. Cụ thể, trình duyệt hiển thị mã lỗi SSL_ERROR_RX_RECORD_TOO_LONG. Đây không phải là cảnh báo "chứng chỉ hết hạn" thông thường; mà là sự không tương thích về giao thức cơ bản. Bạn sẽ không thấy nút "Tiếp tục bằng mọi giá" ở đây vì trình duyệt và máy chủ thậm chí không sử dụng chung một ngôn ngữ giao tiếp.
Nguyên nhân gốc rễ: HTTP đối đầu HTTPS
Lỗi này xảy ra khi Firefox mong đợi một quá trình bắt tay TLS (TLS handshake) được mã hóa nhưng lại nhận về một phản hồi HTTP văn bản thuần túy, không mã hóa. Điều này thường xảy ra khi máy chủ đang lắng nghe trên cổng 443 nhưng chưa được cấu hình để sử dụng SSL/TLS trên cổng cụ thể đó.
Tại sao lại có cụm từ "record too long" (bản ghi quá dài)? Một bản ghi TLS tiêu chuẩn có độ dài tối đa là 16.384 byte (16 KB). Khi Firefox kết nối, nó sẽ gửi một thông điệp "Client Hello". Nếu máy chủ phản hồi bằng văn bản thuần túy—chẳng hạn như HTTP/1.1 404 Not Found—Firefox sẽ cố gắng diễn giải vài ký tự ASCII đầu tiên đó thành một trường độ dài nhị phân. Con số kết quả sẽ cực kỳ lớn, vượt xa giới hạn 16 KB, buộc trình duyệt phải ngắt kết nối để đảm bảo an toàn.
Cách khắc phục 1: Sửa lỗi cấu hình Nginx
Các quản trị viên máy chủ chạy Nginx thường gặp lỗi này do thiếu tham số ssl trong chỉ thị listen. Nếu cấu hình của bạn trông giống như đoạn mã bên dưới, bạn đã tìm thấy nguyên nhân:
server {
listen 443;
server_name example.com;
# Lỗi: Cổng 443 đang mở, nhưng SSL không hoạt động
}
Để khắc phục, hãy thêm ssl vào dòng listen và xác định đường dẫn chứng chỉ của bạn. Các thiết lập hiện đại cũng nên chỉ định các phiên bản TLS để tránh các giao thức cũ, dễ bị tấn công:
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# Sử dụng TLS 1.2 and 1.3 để bảo mật tốt hơn
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
}
Trước khi rời khỏi terminal, hãy kiểm tra cú pháp và tải lại dịch vụ:
sudo nginx -t
sudo systemctl reload nginx
Cách khắc phục 2: Sửa lỗi VirtualHosts trên Apache
Người dùng Apache gặp vấn đề này nếu SSLEngine bị tắt trong khối cổng 443. Ngay cả khi đã liên kết các chứng chỉ hợp lệ, Apache vẫn mặc định sử dụng văn bản thuần túy trừ khi bạn bật tính năng mã hóa một cách rõ ràng.
Kiểm tra tệp cấu hình của bạn (thường nằm trong /etc/apache2/sites-available/) cho các dòng sau:
<VirtualHost *:443>
ServerName example.com
SSLEngine on
SSLCertificateFile /etc/ssl/certs/example.pem
SSLCertificateKeyFile /etc/ssl/private/example.key
</VirtualHost>
Nếu bạn vừa cài đặt một chứng chỉ mới, hãy đảm bảo rằng mô-đun SSL thực sự đang chạy. Chạy các lệnh sau để chắc chắn:
sudo a2enmod ssl
sudo a2ensite your-ssl-config.conf
sudo systemctl restart apache2
Cách khắc phục 3: Giải quyết sự không đồng bộ Proxy trên Cloudflare
Nếu lưu lượng truy cập của bạn đi qua Cloudflare hoặc một CDN tương tự, lỗi này thường bắt nguồn từ vòng lặp "SSL termination". Điều này xảy ra khi proxy mong đợi một giao thức, nhưng máy chủ gốc của bạn lại cung cấp một giao thức khác.
- **Bẫy Flexible SSL:** Ở chế độ "Flexible", Cloudflare kết nối với máy chủ của bạn qua cổng 80 (HTTP). Nếu máy chủ của bạn bắt buộc chuyển hướng sang cổng 443 nhưng không được cấu hình SSL tại đó, quá trình bắt tay sẽ thất bại.
- **Chế độ Full/Strict:** Đây là thiết lập được ưu tiên. Nó yêu cầu máy chủ gốc của bạn phải có chứng chỉ hợp lệ (thậm chí là chứng chỉ tự ký cho chế độ "Full") và giao tiếp qua cổng 443 bằng mã hóa thực tế.
Hãy chuyển cài đặt Cloudflare của bạn sang Full hoặc Full (strict). Sau đó, xác minh rằng máy chủ gốc của bạn không vô tình cung cấp nội dung HTTP thuần túy trên cổng 443.
Cách khắc phục 4: Xử lý sự cố trên trình duyệt cục bộ
Trang web có hoạt động trên Chrome hoặc Safari nhưng lại lỗi trên Firefox không? Vấn đề có thể là do lỗi bộ nhớ đệm cục bộ hoặc xung đột proxy ngay trong chính trình duyệt.
- **Buộc làm mới trang (Hard Refresh):** Nhấn `Ctrl + F5` (hoặc `Cmd + Shift + R` trên Mac) để bỏ qua bộ nhớ đệm cục bộ.
- **Kiểm tra cài đặt Proxy của Firefox:** Truy cập **Settings** > **Network Settings**. Đảm bảo nó được đặt thành "No proxy" trừ khi môi trường của bạn yêu cầu cụ thể.
- **Đặt lại bộ nhớ đệm khởi động:** Nhập `about:support` vào thanh địa chỉ và chọn **Clear startup cache...** để xóa dữ liệu cấu trúc tạm thời.
Cách xác minh kết quả xử lý
Đừng chỉ dựa vào trình duyệt. Hãy sử dụng curl để xem chính xác những gì máy chủ đang gửi lại. Chạy lệnh này trong terminal của bạn:
curl -vI https://yourdomain.com
Tìm dòng * SSL connection using TLSv1.3. Nếu bạn thấy Received HTTP/0.9 when not allowed, nghĩa là máy chủ vẫn đang xuất văn bản thuần túy trên một cổng được mã hóa. Nếu quá trình bắt tay hoàn tất thành công, lỗi Firefox của bạn sẽ biến mất ngay lập tức.

