Lỗi “WordPress TLS Handshake Failed” là một trong những sự cố kỹ thuật phổ biến khiến website không thể kết nối với máy chủ từ xa hoặc dịch vụ bên ngoài. Lỗi này thường xuất hiện khi WordPress cố gắng thiết lập kết nối HTTPS nhưng quá trình bắt tay TLS (Transport Layer Security) thất bại. Hậu quả là các tính năng quan trọng như gửi email SMTP, kết nối API, cập nhật plugin hoặc gọi dữ liệu từ CDN đều bị gián đoạn. Bài viết này sẽ phân tích toàn diện nguyên nhân gốc rễ và hướng dẫn chi tiết cách sửa lỗi TLS handshake failed trong WordPress một cách triệt để.
Bản Chất Của Lỗi WordPress TLS Handshake Failed

TLS handshake là quá trình xác thực và trao đổi khóa mã hóa giữa máy khách (client) và máy chủ (server) trước khi truyền dữ liệu an toàn. Khi WordPress thực hiện yêu cầu HTTPS tới một máy chủ khác, nó đóng vai trò client. Quá trình handshake gồm các bước: client gửi “ClientHello”, server phản hồi “ServerHello” kèm chứng chỉ số, client xác minh chứng chỉ, sau đó hai bên thống nhất khóa phiên. Nếu bất kỳ bước nào thất bại, WordPress sẽ báo lỗi TLS handshake failed kèm mã lỗi cụ thể.
Lỗi này khác với lỗi SSL certificate thông thường ở chỗ nó xảy ra ở tầng giao thức, không chỉ đơn thuần là chứng chỉ hết hạn. Nguyên nhân có thể đến từ cấu hình máy chủ, phiên bản TLS không tương thích, hoặc vấn đề từ thư viện OpenSSL trên hosting. Để khắc phục triệt để, cần hiểu rõ từng loại lỗi handshake và cách xác định chính xác vị trí phát sinh vấn đề.
Các Loại Lỗi TLS Handshake Thường Gặp Trong WordPress

Lỗi SSL Connection Timeout
Xảy ra khi máy chủ không phản hồi trong khoảng thời gian cho phép. WordPress thường báo “cURL error 28: Connection timed out” hoặc “TLS handshake timeout”. Nguyên nhân phổ biến là tường lửa chặn cổng 443, máy chủ từ xa quá tải, hoặc DNS phân giải sai.
Lỗi Certificate Verify Failed
WordPress không thể xác minh chứng chỉ SSL của máy chủ đích. Có thể do chứng chỉ tự ký, chứng chỉ hết hạn, hoặc chuỗi chứng chỉ trung gian không đầy đủ. Lỗi này thường đi kèm mã “cURL error 60: SSL certificate problem”.
Lỗi TLS Version Mismatch
Xảy ra khi máy khách và máy chủ không hỗ trợ cùng phiên bản TLS. Ví dụ, WordPress hosting cũ chỉ hỗ trợ TLS 1.0, nhưng máy chủ đích yêu cầu TLS 1.2 trở lên. Lỗi này ngày càng phổ biến khi các dịch vụ lớn loại bỏ TLS 1.0 và 1.1.
Lỗi SSL Pinning Failure
Một số plugin bảo mật hoặc theme cài đặt SSL pinning, nghĩa là chỉ chấp nhận một chứng chỉ cụ thể. Khi chứng chỉ máy chủ thay đổi, handshake thất bại ngay lập tức.
Nguyên Nhân Gốc Rễ Gây Lỗi WordPress TLS Handshake Failed

| Nguyên nhân | Mô tả chi tiết | Tần suất gặp |
|---|---|---|
| Cấu hình PHP cURL | Phiên bản cURL cũ, thiếu hỗ trợ TLS 1.2/1.3, hoặc cài đặt sai CA bundle | Cao |
| OpenSSL lỗi thời | OpenSSL phiên bản dưới 1.0.2 không hỗ trợ các giao thức mã hóa hiện đại | Trung bình |
| Tường lửa/ModSecurity | Chặn các gói tin TLS handshake, false positive từ quy tắc bảo mật | Cao |
| Chứng chỉ SSL không hợp lệ | Chứng chỉ hết hạn, không đúng domain, hoặc thiếu chứng chỉ trung gian | Trung bình |
| Server Name Indirection (SNI) | Máy chủ cũ không hỗ trợ SNI, gây lỗi với host kết nối ảo | Thấp |
| Plugin/Theme xung đột | Plugin bảo mật, plugin HTTP/2, hoặc theme custom code can thiệp vào kết nối | Trung bình |
Hướng Dẫn Khắc Phục Lỗi WordPress TLS Handshake Failed Từng Bước
Bước 1: Xác Định Chính Xác Mã Lỗi
Kích hoạt WP_DEBUG trong file wp-config.php để xem thông báo lỗi chi tiết. Thêm dòng: define('WP_DEBUG', true); và define('WP_DEBUG_LOG', true);. Kiểm tra file debug.log trong thư mục wp-content. Các mã lỗi thường gặp: cURL error 28, error 35, error 60, error 77. Mỗi mã lỗi định hướng đến nhóm nguyên nhân khác nhau.
Sử dụng plugin Query Monitor để ghi lại toàn bộ HTTP requests và response. Plugin này hiển thị thời gian handshake, mã trạng thái, và lỗi cụ thể từ WordPress HTTP API. Đây là công cụ không thể thiếu để chẩn đoán chính xác nguyên nhân.
Bước 2: Kiểm Tra Phiên Bản PHP, cURL và OpenSSL
Truy cập trang Site Health trong WordPress (Tools > Site Health) hoặc tạo file phpinfo.php. Kiểm tra các thông số sau: cURL version (yêu cầu từ 7.58.0 trở lên), OpenSSL version (1.1.1 trở lên), TLS version hỗ trợ. Nếu phiên bản quá thấp, cần yêu cầu hosting nâng cấp hoặc chuyển sang hosting tốt hơn.
Một số host cho phép thay đổi phiên bản PHP qua cPanel hoặc Plesk. Nâng từ PHP 7.2 lên 8.1 hoặc 8.2 thường giải quyết được vấn đề tương thích TLS. Đồng thời cập nhật thư viện cURL và OpenSSL nếu hosting là VPS/dedicated server.
Bước 3: Cập Nhật CA Certificate Bundle (Cacert.pem)
WordPress sử dụng CA bundle từ hệ thống hoặc tự cung cấp. Nếu bundle cũ, các chứng chỉ gốc mới không được công nhận. Tải file cacert.pem mới nhất từ https://curl.se/docs/caextract.html và đặt vào thư mục wp-includes/certificates/. Sau đó thêm dòng sau vào wp-config.php: define('WP_CURL_CA_BUNDLE', ABSPATH. WPINC. '/certificates/cacert.pem');
Đối với môi trường hosting có sẵn CA bundle, cần kiểm tra đường dẫn và cập nhật. Nếu không có quyền ghi, liên hệ bộ phận hỗ trợ kỹ thuật của nhà cung cấp.
Bước 4: Tạm Thời Vô Hiệu Hóa Plugin và Theme
Vô hiệu hóa tất cả plugin bằng cách đổi tên thư mục wp-content/plugins thành plugins_old. Nếu lỗi biến mất, kích hoạt từng plugin để xác định plugin gây xung đột. Các plugin thường gây lỗi handshake: Wordfence Security, Sucuri Security, WP Smush (khi tải ảnh từ CDN bên ngoài), hoặc bất kỳ plugin nào sử dụng HTTP requests với cấu hình SSL tùy chỉnh.
Chuyển sang theme mặc định WordPress Twenty Twenty-Four. Nếu lỗi liên quan đến theme, file functions.php có thể chứa code thay đổi cấu hình cURL mặc định hoặc SSL verification.
Bước 5: Kiểm Tra Tường Lửa và ModSecurity
Tường lửa ứng dụng web (WAF) như ModSecurity có thể chặn các header TLS handshake có kích thước lớn hoặc bất thường. Tạm thời tắt ModSecurity qua.htaccess hoặc yêu cầu hosting vô hiệu hóa. Kiểm tra log tường lửa để tìm các giao dịch bị chặn.
Nếu sử dụng Cloudflare hoặc CDN, thử tạm thời tắt chế độ Under Attack Mode hoặc SSL Full (Strict). Chuyển sang SSL Flexible để kiểm tra xem lỗi có đến từ CDN không.
Bước 6: Kiểm Tra DNS và Kết Nối Mạng
Sử dụng lệnh openssl s_client -connect example.com:443 -servername example.com từ terminal hosting để kiểm tra handshake trực tiếp. Nếu handshake thành công, vấn đề nằm trong WordPress. Nếu thất bại, nguyên nhân từ máy chủ hoặc mạng.
Kiểm tra xem hosting có hỗ trợ IPv6 không. Đôi khi IPv6 bị chặn nhưng DNS lại ưu tiên IPv6, gây ra lỗi handshake timeout. Vô hiệu hóa IPv6 trong WordPress bằng cách thêm vào functions.php: remove_filter('pre_http_request', 'wp_http_requests_hosts'); kết hợp với code xóa AAAA records từ DNS.
Sai Lầm Thường Gặp Khi Xử Lý Lỗi TLS Handshake

Phớt Lờ Cảnh Báo Từ Site Health
Nhiều admin thấy cảnh báo “The REST API encountered an error” hoặc “Your site is not able to connect to WordPress.org securely” nhưng bỏ qua. Đây là dấu hiệu đầu tiên cho thấy có lỗi TLS handshake tiềm ẩn. Các cảnh báo này cần được xử lý ngay lập tức.
Chỉ Tập Trung Vào Chứng Chỉ SSL
Đa số người dùng lầm tưởng lỗi handshake luôn liên quan đến chứng chỉ SSL. Trong thực tế, hơn 40% trường hợp là do cấu hình cURL/OpenSSL lỗi thời hoặc xung đột plugin. Việc kiểm tra chứng chỉ là bước đầu nhưng không nên dừng lại ở đó.
Thay Đổi Múi Giờ Server Mà Không Kiểm Tra
Một số hosting có múi giờ khác biệt ảnh hưởng đến thời gian chứng chỉ hợp lệ. Tuy nhiên, đây là nguyên nhân hiếm gặp. Admin mất nhiều thời gian điều chỉnh múi giờ trong khi nguyên nhân thực sự là firewall blocking.
Cài Đặt SSL Plugin Mà Không Kiểm Tra Tương Thích
Các plugin như “Really Simple SSL” hoặc “SSL Insecure Content Fixer” đôi khi tự động thay đổi cấu hình cURL hoặc ghi đè lên CA bundle, gây hỏng handshake. Cần kiểm tra kỹ các thay đổi trước khi kích hoạt.
Lưu Ý Quan Trọng Để Phòng Ngừa Lỗi TLS Handshake
Sử dụng hosting có hỗ trợ PHP hiện đại (8.1+) và cập nhật thường xuyên. Chọn nhà cung cấp có đội ngũ hỗ trợ kỹ thuật am hiểu về SSL/TLS. Tránh các hosting giá rẻ sử dụng phiên bản OpenSSL cổ từ năm 2015.
Luôn cập nhật WordPress, plugin và theme lên phiên bản mới nhất. Mỗi bản cập nhật đều bao gồm các bản vá bảo mật và cải thiện tương thích với thư viện kết nối. Đặc biệt, plugin “WordPress HTTPS (SSL)” cần được cập nhật để hỗ trợ TLS 1.3.
Sao lưu cấu hình cURL thông qua WP-CLI: sử dụng lệnh wp option get siteurl và kiểm tra các hằng số trong wp-config.php. Ghi lại cấu hình chuẩn để dễ dàng khôi phục khi xảy ra sự cố.
Thiết lập monitoring tự động cho HTTP requests dùng plugin “HTTP Requests Monitor”. Cảnh báo ngay khi phát hiện handshake thất bại, cho phép xử lý kịp thời trước khi ảnh hưởng đến trải nghiệm người dùng.
Câu Hỏi Thường Gặp Về Lỗi WordPress TLS Handshake Failed

Lỗi TLS handshake failed ảnh hưởng đến tính năng nào trên WordPress?
Lỗi này ngăn chặn WordPress giao tiếp với các máy chủ bên ngoài. Các tính năng bị ảnh hưởng bao gồm: gửi email qua SMTP, cập nhật plugin và theme tự động, kết nối với dịch vụ REST API, gọi dữ liệu từ CDN, xác thực người dùng qua OAuth, và đồng bộ hóa với các nền tảng third-party như WooCommerce, Jetpack, hoặc Google Analytics.
Làm thế nào để kiểm tra handshake TLS giữa hosting WordPress và server từ xa?
Sử dụng SSH vào hosting và chạy lệnh: curl -v --tlsv1.2 https://example.com. Nếu thấy “SSL connection using TLSv1.2” và “HTTP/2 200”, kết nối thành công. Nếu thấy “handshake failure” hoặc “certificate verify failed”, cần kiểm tra thêm với openssl s_client -connect example.com:443 -servername example.com để xem chi tiết chứng chỉ và giao thức.
Có thể sửa lỗi bằng cách tắt SSL verification trong WordPress không?
Có thể thêm dòng define('WP_HTTP_SSL_VERIFY', false); vào wp-config.php để tắt xác minh chứng chỉ. Tuy nhiên, đây chỉ là giải pháp tạm thời và không an toàn. Tắt SSL verification khiến website dễ bị tấn công man-in-the-middle. Chỉ sử dụng khi debug và luôn bật lại sau khi xác định nguyên nhân.
Plugin nào thường gây xung đột với quá trình TLS handshake?
Các plugin bảo mật như Wordfence Security, All In One WP Security, và Sucuri Security có thể chặn hoặc thay đổi cấu hình kết nối. Plugin caching như WP Rocket hoặc W3 Total Cache đôi khi can thiệp vào HTTP headers gây lỗi handshake. Plugin tối ưu ảnh Smush khi get image từ CDN ngoài cũng dễ gặp lỗi này. Kiểm tra bằng cách tắt từng plugin.
Kết Luận
Lỗi “WordPress TLS Handshake Failed” là vấn đề kỹ thuật phức tạp nhưng hoàn toàn có thể khắc phục nếu bạn tiếp cận có hệ thống. Bắt đầu từ việc xác định mã lỗi cụ thể, kiểm tra cấu hình PHP cURL, cập nhật CA bundle, vô hiệu hóa plugin gây xung đột, và kiểm tra tường lửa. Đừng bỏ qua các bước cơ bản và luôn sao lưu trước khi thay đổi cấu hình.
Một website WordPress ổn định cần môi trường hosting hiện đại với TLS 1.2/1.3 hỗ trợ đầy đủ. Định kỳ kiểm tra Site Health và các log lỗi để phát hiện sớm dấu hiệu bất thường. Nếu gặp khó khăn, liên hệ đội ngũ hỗ trợ kỹ thuật của hosting với các thông tin log cụ thể. Áp dụng các giải pháp trong bài viết này sẽ giúp bạn chấm dứt triệt để lỗi handshake và đảm bảo mọi kết nối HTTPS hoạt động trơn tru.
- WordPress Cache Timeout: Bí Quyết Cấu Hình Đúng Để Website Vừa Nhanh Vừa Ổn Định
- Plugin bảo mật khóa admin: Giải pháp toàn diện bảo vệ website WordPress khỏi tấn công brute force
- Theme WordPress Image Size Lỗi: Nguyên Nhân, Cách Khắc Phục và Tối Ưu Hình Ảnh Triệt Để
- Plugin WordPress Xung Đột Với WordPress Core: Nguyên Nhân, Dấu Hiệu Và Cách Xử Lý Triệt Để
- Theme WordPress Database Overload: Nguyên Nhân, Dấu Hiệu và Cách Khắc Phục Triệt Để














