Lỗi giao thức SSL là một sự cố phía trình duyệt hoặc máy chủ ngăn cản việc thiết lập thành công một kết nối HTTPS an toàn. Khi điều này xảy ra, người dùng thường thấy các lỗi phổ biến như:
ERR_SSL_PROTOCOL_VERSION_ALERT
Lỗi này xảy ra khi máy khách và máy chủ không thể thống nhất được một phiên bản giao thức SSL/TLS chung. Các trình duyệt hiện đại yêu cầu TLS 1.2 trở lên, trong khi các máy chủ cũ có thể chỉ hỗ trợ các phiên bản đã lỗi thời. Điều này thường xảy ra khi:
ERR_SSL_HANDSHAKE_FAILURE
Lỗi này xảy ra khi quá trình bắt tay SSL/TLS không thành công trong việc thiết lập kết nối an toàn giữa máy khách và máy chủ. Quá trình bắt tay bao gồm các bước:
Nguyên nhân phổ biến của lỗi bắt tay bao gồm:
ERR_SSL_NO_CYPHER_OVERLAP
Lỗi này xảy ra khi máy khách và máy chủ không có bất kỳ bộ mã hóa chung nào để mã hóa. Điều này thường xảy ra khi:
ERR_SSL_CERTIFICATE_INVALID
Lỗi này xảy ra khi có vấn đề với chứng chỉ SSL, như hết hạn, không khớp hostname hoặc chuỗi chứng chỉ không hợp lệ. Các nguyên nhân cụ thể gồm:
Việc không khớp chứng chỉ xảy ra khi tên miền trong chứng chỉ SSL không trùng khớp với tên miền thực tế được truy cập. Điều này có thể xảy ra theo nhiều cách:
example.com
nhưng được sử dụng trên www.example.com
hoặc một tên miền phụĐể sửa lỗi không khớp chứng chỉ:
Dưới đây là bảng tóm tắt các lỗi giao thức SSL phổ biến và nguyên nhân:
Nguyên nhân | Mô tả | Giải pháp |
---|---|---|
Chứng chỉ SSL không hợp lệ | Chứng chỉ hết hạn, cấu hình sai hoặc tự ký | Gia hạn chứng chỉ, cấu hình lại chuỗi chứng chỉ, hoặc lấy chứng chỉ hợp lệ từ CA tin cậy |
Không khớp giao thức SSL | Máy chủ và trình duyệt hỗ trợ các phiên bản không tương thích (ví dụ: TLS 1.0 so với 1.3) | Cập nhật cấu hình máy chủ hỗ trợ phiên bản TLS hiện đại (1.2 trở lên) và cho phép thương lượng giao thức |
Lỗi đồng hồ hệ thống | Thời gian/ngày hệ thống sai gây lỗi xác thực chứng chỉ | Đồng bộ thời gian hệ thống với máy chủ NTP bằng ntpdate hoặc bật đồng bộ tự động |
Phần mềm diệt virus hoặc tường lửa chặn | Công cụ bảo mật can thiệp vào lưu lượng SSL | Cấu hình để cho phép lưu lượng SSL/TLS hoặc tạm thời vô hiệu để kiểm tra |
Bộ nhớ cache hoặc cookie của trình duyệt | Dữ liệu cache hỏng gây gián đoạn phiên an toàn | Xóa bộ nhớ cache và cookie hoặc thử ở chế độ ẩn danh |
Hệ điều hành hoặc trình duyệt lỗi thời | Phiên bản cũ không hỗ trợ giao thức SSL/TLS mới | Cập nhật hệ điều hành và trình duyệt lên phiên bản mới nhất |
Xung đột DNS hoặc file Hosts | DNS hoặc file host tùy chỉnh gây lỗi chứng chỉ | Kiểm tra bản ghi DNS, xóa cache DNS, kiểm tra file hosts |
Cấu hình máy chủ sai | Cài đặt HTTPS sai hoặc chứng chỉ hết hạn trên máy chủ | Kiểm tra và cập nhật cấu hình SSL máy chủ, đảm bảo chứng chỉ được cài đúng |
Lỗi cache SSL | Cache phiên SSL hỏng gây lỗi bắt tay | Xóa cache phiên SSL bằng openssl s_client -connect với flag -no_ticket hoặc khởi động lại dịch vụ SSL |
Cache DNS hệ thống | Bản ghi DNS lỗi thời gây lỗi xác thực chứng chỉ | Xóa cache DNS hệ thống bằng systemd-resolve --flush-caches hoặc khởi động lại dịch vụ DNS |
Trước khi khắc phục lỗi SSL, bạn cần cài đặt các công cụ chẩn đoán cần thiết để phân tích cấu hình SSL và xác định các vấn đề cụ thể.
Cập nhật danh sách gói:
sudo apt update
Cài đặt OpenSSL để kiểm tra chứng chỉ và kết nối:
sudo apt install openssl
Lệnh openssl
cung cấp các khả năng kiểm tra SSL/TLS toàn diện, bao gồm xác thực chứng chỉ, thử nghiệm giao thức và phân tích bộ mã hóa.
Cài đặt curl
để kiểm tra HTTP/HTTPS:
sudo apt install curl
Curl
cho phép gửi yêu cầu HTTP/HTTPS kèm thông tin gỡ lỗi SSL chi tiết, rất quan trọng để khắc phục sự cố kết nối.
Cài đặt nmap
để quét cổng và dịch vụ SSL:
sudo apt install nmap
Nmap
giúp quét các cổng mở và kiểm tra dịch vụ SSL, hỗ trợ bạn xác định các vấn đề cấu hình ở cấp mạng.
Bây giờ bạn đã có các công cụ cần thiết, chúng ta bắt đầu chẩn đoán lỗi giao thức SSL một cách có hệ thống.
Sử dụng OpenSSL để kiểm tra kết nối SSL đến máy chủ:
openssl s_client -connect your-domain.com:443 -servername your-domain.com
Thay your-domain.com
bằng tên miền thực tế của bạn. Tham số -servername
kích hoạt Server Name Indication (SNI), cần thiết với máy chủ lưu trữ nhiều chứng chỉ SSL.
Lệnh này sẽ hiển thị thông tin chi tiết về quá trình bắt tay SSL. Các chỉ báo quan trọng gồm:
Ví dụ kết nối SSL thành công:
CONNECTED(00000003)
depth=2 C = US, O = Internet Security Research Group, CN = ISRG Root X1
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = R3
verify return:1
depth=0 CN = your-domain.com
verify return:1
---
Certificate chain
0 s:/CN=your-domain.com
i:/C=US/O=Let's Encrypt/CN=R3
1 s:/C=US/O=Let's Encrypt/CN=R3
i:/C=US/O=Internet Security Research Group/CN=ISRG Root X1
---
Server certificate
-----BEGIN CERTIFICATE-----
... (chi tiết chứng chỉ)
-----END CERTIFICATE-----
subject=/CN=your-domain.com
issuer=/C=US/O=Let's Encrypt/CN=R3
---
No client certificate CA names sent
Peer signing digest: SHA256
Peer signature type: RSA
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 3053 bytes and written 456 bytes
Verification: OK
---
New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN, server accepted to use h2
---
Ví dụ kết nối SSL thất bại:
CONNECTED(00000003)
depth=0 CN = your-domain.com
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 CN = your-domain.com
verify error:num=21:unable to verify the first certificate
verify return:1
---
Certificate chain
0 s:/CN=your-domain.com
i:/C=US/O=Let's Encrypt/CN=R3
---
Server certificate
-----BEGIN CERTIFICATE-----
... (chi tiết chứng chỉ)
-----END CERTIFICATE-----
subject=/CN=your-domain.com
issuer=/C=US/O=Let's Encrypt/CN=R3
---
No client certificate CA names sent
Peer signing digest: SHA256
Peer signature type: RSA
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 3053 bytes and written 456 bytes
Verification error: unable to verify the first certificate
---
New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN, server accepted to use h2
---
Giải thích và cách sửa:
Kết nối SSL thất bại do lỗi xác thực chuỗi chứng chỉ. Cụ thể:
verify error:num=20:unable to get local issuer certificate
: Máy khách (trong trường hợp này là openssl s_client
) không tìm thấy chứng chỉ của nhà phát hành trong kho tin cậy. Thường do chứng chỉ trung gian bị thiếu hoặc cấu hình sai.verify error:num=21:unable to verify the first certificate
: Lỗi này là hệ quả của lỗi trên, vì máy khách không xác thực được chứng chỉ đầu tiên do thiếu chứng chỉ trung gian.Để khắc phục, bạn cần:
Sau khi sửa lỗi, thử kiểm tra lại kết nối SSL để xác nhận chuỗi chứng chỉ được cấu hình đúng và kết nối thành công.
Kiểm tra phiên bản SSL/TLS mà máy chủ hỗ trợ:
openssl s_client -connect your-domain.com:443 -tls1_2 -servername your-domain.com
Kết quả:
(Thông tin chuỗi chứng chỉ và bắt tay tương tự ví dụ trước)
Kiểm tra hỗ trợ TLS 1.3:
openssl s_client -connect your-domain.com:443 -tls1_3 -servername your-domain.com
Kết quả tương tự với minh họa bắt tay TLS 1.3.
Nếu bạn nhận được lỗi wrong version number
, nghĩa là máy chủ không hỗ trợ phiên bản TLS đó. Ví dụ:
openssl s_client -connect your-domain.com:443 -tls1_1 -servername your-domain.com
Có thể xuất hiện lỗi như:
140255555555:error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure:s3_pkt.c:1492:SSL alert number 40
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 7 bytes and written 305 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN, server accepted to use h2
---
Để sửa lỗi wrong version number
, cần đảm bảo máy chủ được cấu hình hỗ trợ phiên bản TLS bạn muốn dùng.