Lý do không thể xác thực chứng chỉ SSL?

 

Khi trình duyệt web cố gắng thiết lập một kết nối HTTPS an toàn, nó sẽ bắt đầu một quy trình “bắt tay” SSL/TLS (SSL/TLS handshake) với máy chủ. Đây là một chuỗi các bước kiểm tra mật mã, trong đó nhiệm vụ quan trọng nhất của trình duyệt là xác thực chứng chỉ X.509 do máy chủ cung cấp.

Vậy nếu không thể xác thực chứng chỉ SSL thì sao? Nguyên nhân là gì? hãy cùng SSL.VN cùng tìm hiểu nhé.

1. Lý do không thể xác thực chứng chỉ SSL?

 

* Lý do 1: Lỗi cấu hình chuỗi chứng chỉ (Chain of Trust):

Máy chủ web (Nginx, Apache…) chỉ gửi chứng chỉ của tên miền (leaf certificate) mà không gửi kèm các chứng chỉ trung gian (intermediate certificates).

Khi trình duyệt nhận được chứng chỉ của bạn, nó tìm chứng chỉ đã ký ra nó (cái Intermediate). Nếu máy chủ không gửi kèm, trình duyệt sẽ cố gắng tự tìm (dựa trên thông tin “Authority Information Access” trong chứng chỉ). Nếu quá trình này thất bại (ví dụ: firewall chặn, CA không public), trình duyệt không thể xây dựng được đường dẫn tin cậy từ chứng chỉ của bạn -> Intermediate CA -> Root CA. Kết quả là lỗi.

* Lý do 2: Lỗi không khớp SNI (Server Name Indication):

Máy chủ nhận được yêu cầu, nhìn vào trường SNI và chọn chứng chỉ tương ứng để gửi lại. Nếu máy chủ cấu hình sai (ví dụ: không bật SNI, hoặc không có chứng chỉ cho tên miền đó), nó sẽ gửi về một chứng chỉ mặc định (thường là của tên miền đầu tiên được cấu hình). Trình duyệt nhận được chứng chỉ này, so sánh tên miền trên chứng chỉ (ví dụ: default-host.com) với tên miền nó yêu cầu (google.com) và báo lỗi Domain Mismatch.

* Lý do 4: Lỗi đàm phán giao thức/mật mã (Protocol/Cipher Mismatch)

Về mặt kỹ thuật, đây là lỗi handshake trước cả khi xác thực chứng chỉ, nhưng người dùng cuối thường chỉ thấy thông báo lỗi SSL chung chung.

Máy chủ (đặc biệt là các máy chủ cũ) chỉ hỗ trợ các giao thức cũ (như SSLv3, TLS 1.0) hoặc các cipher yếu đã bị cấm (như RC4, 3DES). Trình duyệt hiện đại (Chrome, Firefox) đã ngừng hỗ trợ các giao thức/cipher này. Nếu không có bất kỳ sự trùng khớp nào trong danh sách hỗ trợ, kết nối sẽ thất bại với lỗi HANDSHAKE_FAILURE.

2. Cách sửa lỗi không thể xác thực chứng chỉ SSL?

Cách 1: Sửa lỗi Chuỗi chứng chỉ (Chain of Trust)

Đảm bảo bạn đang sửâ dụng tệp fullchain.pem (hoặc tệp tương đương) trong cấu hình máy chủ, chứ không phải cert.pem.

# SAI
ssl_certificate /path/to/your/cert.pem;

# ĐÚNG
ssl_certificate /path/to/your/fullchain.pem;
ssl_certificate_key /path/to/your/private.key;

Gia hạn chứng chỉ:

Chạy lại công cụ cấp phát (như Certbot của Let’s Encrypt) để gia hạn.

sudo certbot renew

Cách 2:

Chạy lệnh sau khi cấp phát, hãy đảm bảo bạn bao gồm tất cả các tên miền cần thiết dưới dạng SANs (Subject Alternative Names).

sudo certbot –nginx -d example.com -d www.example.com

Đồng thời, đảm bảo máy chủ của bạn (đặc biệt là khi dùng IP chia sẻ) đã bật và cấu hình SNI chính xác.

Cách 3: 

Cập nhật tệp cấu hình SSL của bạn (ví dụ: ssl.conf, httpd-ssl.conf) để chỉ cho phép các giao thức mạnh.

 

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ‘ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384’;

Cách 4:

Cấu hình máy chủ của bạn tự truy vấn CA và “đính kèm” (staple) phản hồi OCSP vào TLS handshake. Điều này giúp client không cần tự mình đi kiểm tra.

ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /path/to/your/chain.pem; # Thường là fullchain hoặc chain
resolver 8.8.8.8 1.1.1.1 valid=300s;

Cách 5:

Truy cập ssllabs.com/ssltest/ và nhập tên miền của bạn. Nó sẽ phân tích toàn diện máy chủ của bạn và báo cáo các lỗi cụ thể, đặc biệt là lỗi “Chain issues” (thường là “Incomplete” hoặc “Extra”).

Sử dụng lệnh Openssl s_client để mô phỏng một kết nối và xem chi tiết quá trình handshake.

Cách 6:

Sử dụng lệnh openssl s_client để mô phỏng một kết nối và xem chi tiết quá trình handshake.

openssl s_client -connect your_domain.com:443 -servername your_domain.com

Tìm dòng Verify return code ở cuối. Nếu nó khác 0 (ok), nghĩa là có lỗi. Lệnh này cũng sẽ hiển thị chuỗi chứng chỉ (Certificate chain) mà máy chủ gửi về.

3. Cuối cùng:

Trên đây là bài viết của mình về Lý do không thể xác thực chứng chỉ SSL và các cách fix của nó – Nếu thấy hay các bạn hãy cmt xuống bên dưới để mình được biết nhé.

 

0/5 (0 Reviews)

Leave a Comment