cURL không kết nối với HTTPS trong khi wget không (lỗi NSS -12286)


8

Tôi đang gặp lỗi NSS error -12286khi tải xuống tệp từ HTTPS curl.

Tôi có thể tải xuống cùng một tệp mà không gặp sự cố khi sử dụng wgetvì vậy tôi có thể loại trừ mọi sự cố về tường lửa hoặc danh sách đen.

Đã thử, không có may mắn, các tùy chọn -k--cipher ecdhe_ecdsa_aes_128_gcm_sha_256, đó là mật mã ưa thích của máy chủ theo công cụ Máy chủ thử nghiệm SSL của Qualys tại đây: https://www.ssllabs.com/ssltest/analyze.html?d=intribunale.net&latest

Đây là cURLnhật ký:

# curl -v https://www.intribunale.net/immobili
* About to connect() to www.intribunale.net port 443 (#0)
*   Trying 104.27.150.214... connected
* Connected to www.intribunale.net (104.27.150.214) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
*   CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none
* NSS error -12286
* Closing connection #0
* SSL connect error
curl: (35) SSL connect error

Phiên bản lib của tôi là:

# curl -V
curl 7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.19.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2
Protocols: tftp ftp telnet dict ldap ldaps http file https ftps scp sftp
Features: GSS-Negotiate IDN IPv6 Largefile NTLM SSL libz

Có liên quan: www-archive.mozilla.org/projects/security/pki/nss/ref/ssl/ trộm trong đó nói rằng lỗi NSS -12286 có nghĩa là SSL_ERROR_NO_CYPHER_OVERLAP"Không thể giao tiếp an toàn với ngang hàng: không có thuật toán mã hóa chung." Các hệ thống cục bộ và từ xa chia sẻ không có bộ mật mã chung. Điều này có thể là do cấu hình sai ở một trong hai đầu. Có thể do máy chủ bị định cấu hình sai khi sử dụng chứng chỉ không phải RSA với thuật toán trao đổi khóa RSA.
Celada

2
Tôi có thể tái tạo vấn đề của bạn với CentOS6.7 curl-7.19.7-46.el6 nss-3.21.0-0.3.el6_7 đến một máy chủ thử nghiệm. Theo mặc định, nó không cung cấp bất kỳ bộ ECC nào và vì máy chủ của bạn (Cloudfare) chỉ chấp nhận đàm phán bộ ECC (cụ thể là ECDHE) không thành công. Với --cipher[s]việc chỉ định bộ ECDHE, nó thậm chí không gửi ClientHello, chỉ đóng kết nối và báo lỗi. Điều này dường như là một cái gì đó không đồng bộ trong nội bộ, có lẽ sau khi từ chối ECC lâu dài của RedHat. RedHat wget sử dụng OpenSSL và RedHat OpenSSL gần đây không hỗ trợ ECC (chỉ với P256 P384 P521 nhưng điều đó là đủ ở đây).
dave_thndry_085

1
Lựa chọn đầu tiên của tôi sẽ là (0) không sử dụng (này) curl, nhưng nếu bạn thực sự muốn các tùy chọn tôi thấy là: (1) nếu bạn có hỗ trợ, hãy báo cáo đó là một lỗi và hy vọng họ sẽ sửa nó. (2) đó là nguồn mở; gỡ lỗi và tự sửa nó. (3) nó là nguồn mở; xây dựng lại chống lại openssl (thay vì NSS) sẽ hoạt động. (4) thiết lập stunnel(sử dụng openssl) dưới dạng SSL đơn giản, nói với curl http(notS)://localhost[:port]/whatevernhưng thêm -H "Host: realhost"để máy chủ mục tiêu không thể phân biệt được. ...
dave_thndry_085

1
... (5) tương tự nhưng chính thức hơn: thiết lập proxy HTTP thực bằng cách sử dụng openssl tại đây hoặc bất kỳ SSL / TLS tương thích TLS1.2-ECDHE nào trên hệ thống khác trong điều khiển của bạn, thậm chí có thể là VM trên máy thật của bạn, như HAproxy hoặc nginx hoặc thậm chí httpd, mà bạn kết nối với HTTP đơn giản hoặc ít nhất là HTTPS không phải ECDHE nhưng chuyển tiếp đến máy chủ thực với HTTPS ECDHE tốt.
dave_thndry_085

1
NSS ngược dòng chắc chắn hỗ trợ ECDHE trong một thời gian dài. RedHat trong nhiều năm cho đến cuối năm 2014 đã loại bỏ (tất cả các biến thể) ECC khỏi các gói xây dựng của họ (AFAIK, chắc chắn là OpenSSL NSS OpenJDK) vì những lý do mơ hồ 'mà tôi gọi là' từ chối dài '. Tôi đoán khi họ đặt nó trở lại, họ đã phạm một số lỗi nhỏ có thể ảnh hưởng đến trường hợp curl / NSS này. Tôi không biết bất kỳ bản phân phối nào khác đã làm điều này, nhưng có rất nhiều và ai đó có thể; trong một Ubuntu tôi hiện có, 14.04LTS Trusty, curl sử dụng OpenSSL và không hỗ trợ ECDHE.
dave_thndry_085

Câu trả lời:


8

Giải pháp đã được nâng cấp lên cURL 7.42 bằng cách sử dụng kho lưu trữ của bên thứ ba cho CentOS 6 hoặc xây dựng từ các nguồn


14
Nâng cấp gói nss (tức là yum update nss) hoặc sử dụng curl -1cũng có thể giải quyết điều này.
DiegoG

1
Cảm ơn! Tôi gặp phải vấn đề này vì máy chủ yêu cầu tlsv1.2. Nâng cấp đã giải quyết vấn đề của tôi.
hao

cập nhật nss là để khắc phục vấn đề đó
Sơn Lâm

4

Chúng tôi đã có vấn đề tương tự với curl 7.19.7. Chúng tôi đã nâng cấp NSS và nó đã khắc phục sự cố!


0

Trên CentOS 6 với gói openssl mới nhất (1.0.1e) Bạn nên cập nhật nss (yum update nss) như DiegoG đã viết ở trên. Lệnh cập nhật-ca-tin cũng có thể hữu ích. Nếu bạn đang sử dụng curl qua php - khởi động lại quá trình / dịch vụ máy chủ web (nghĩa là khởi động lại dịch vụ httpd).

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.