curl: (35) error: 1408F10B: SSL thường xuyên: ssl3_get_record: số phiên bản sai


118

Khi tôi cố gắng kết nối với bất kỳ máy chủ nào (ví dụ: google.com) bằng curl (hoặc libcurl), tôi nhận được thông báo lỗi:

curl: (35) error: 1408F10B: SSL thường xuyên: ssl3_get_record: số phiên bản sai

Báo cáo dài dòng:

$ curl www.google.com --verbose  
* Rebuilt URL to: www.google.com/  
* Uses proxy env variable no_proxy == 'localhost,127.0.0.1,localaddress,.localdomain.com'  
* Uses proxy env variable http_proxy == 'https://proxy.in.tum.de:8080'  
*   Trying 131.159.0.2...  
* TCP_NODELAY set  
* Connected to proxy.in.tum.de (131.159.0.2) port 8080 (#0)  
* successfully set certificate verify locations:  
*   CAfile: /etc/ssl/certs/ca-certificates.crt  
  CApath: none  
* TLSv1.3 (OUT), TLS handshake, Client hello (1):  
* error:1408F10B:SSL routines:ssl3_get_record:wrong version number  
* Closing connection 0  
curl: (35) error:1408F10B:SSL routines:ssl3_get_record:wrong version number'  

Vì một số lý do, curl dường như sử dụng TLSv1.3 ngay cả khi tôi buộc nó sử dụng TLSv1.2 bằng lệnh --tlsv1.2 (nó sẽ vẫn in TLSv1.3 (OUT), ... "Tôi đang sử dụng phiên bản mới nhất của cả Curl và OpenSSL:

$ curl -V  
curl 7.61.0-DEV (x86_64-pc-linux-gnu) libcurl/7.61.0-DEV OpenSSL/1.1.1 zlib/1.2.8  
Release-Date: [unreleased]  
Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp  
Features: AsynchDNS IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP UnixSockets HTTPS-proxy  

Tôi nghĩ rằng đây là một vấn đề liên quan đến việc cài đặt các chương trình của tôi. Ai đó có thể giải thích cho tôi thông báo lỗi này có nghĩa là gì?

Câu trả lời:


197
* Uses proxy env variable http_proxy == 'https://proxy.in.tum.de:8080'   
                                         ^^^^^

Điều đó https://là sai, nó nên được http://. Bản thân proxy phải được truy cập bằng HTTP chứ không phải HTTPS mặc dù URL đích là HTTPS. Tuy nhiên, proxy sẽ xử lý đúng cách kết nối HTTPS và giữ mã hóa end-to-end. Xem phương thức HTTP CONNECT để biết chi tiết cách thực hiện điều này.


7
nếu bạn gặp lỗi này trong Docker, việc hiển thị cổng 443 ở chế độ công khai đã khắc phục sự cố này
Dr.X

7

Câu trả lời đơn giản

Nếu bạn đang sử dụng máy chủ proxy, vui lòng đặt proxy cho curl. Curl không thể kết nối với máy chủ nên nó hiển thị sai số phiên bản. Đặt proxy bằng cách mở subl ~ / .curlrc hoặc sử dụng bất kỳ trình soạn thảo văn bản nào khác. Sau đó thêm dòng sau vào tệp: proxy = proxyserver: proxyport Ví dụ: proxy = 10.8.0.1:8080

Nếu bạn không sử dụng proxy, hãy đảm bảo rằng tệp curlrc không chứa cài đặt proxy.


7

Nếu bất kỳ ai gặp lỗi này bằng cách sử dụng Nginx, hãy thử thêm phần sau vào cấu hình máy chủ của bạn:

server {
    listen 443 ssl;
    ...
}

Vấn đề bắt nguồn từ việc Nginx phân phối máy chủ HTTP cho một khách hàng mong đợi HTTPS trên bất kỳ cổng nào bạn đang nghe. Khi bạn chỉ định ssltrong listenchỉ thị, bạn xóa điều này ở phía máy chủ.


2
thx, điều này đã dẫn tôi đến giải pháp, chỉ đơn giản là bỏ lỡ 'ssl' trong dòng cấu hình nginx được đề cập
normic

0

Đơn giản hơn trong một dòng:

proxy = 192.168.2.1: 8080; curl -v example.com

ví dụ. $ proxy = 192.168.2.1: 8080; curl -v example.com

xxxxxxxxx-ASUS: ~ $ proxy = 192.168.2.1: 8080; curl -v https: //google.com | head -c 15% Tổng% đã nhận% Xferd Tốc độ trung bình Thời gian Thời gian Tải lên hiện tại Tổng chi phí Tốc độ còn lại 0 0 0 0 0 0 0 0 -: -: - -: -: - -: -: - 0

  • Đang thử 172.217.163.46:443 ...
  • Bộ TCP_NODELAY
  • Đã kết nối với google.com (172.217.163.46) cổng 443 (# 0)
  • ALPN, cung cấp h2
  • ALPN, cung cấp http / 1.1
  • đặt thành công các vị trí xác minh chứng chỉ:
  • CAfile: /etc/ssl/certs/ca-certificates.crt CApath: / etc / ssl / certs} [5 byte dữ liệu]
  • TLSv1.3 (OUT), TLS bắt tay, Ứng dụng khách xin chào (1):} [512 byte dữ liệu]
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.