Vô hiệu hóa SSLv3 trong cURL?


7

Tôi gặp sự cố khi kết nối với trang web được lưu trữ với CloudFlare bằng cURL. Khi tôi cố gắng kết nối với trang web bằng HTTPS (bằng cách sử dụng curl -v https://www.xxxxxx.com), nó báo:

* About to connect() to www.xxxxxx.com port 443 (#0)
*   Trying 2400:cb00:2048:1::681c:116e...
* Connected to www.xxxxxx.com (2400:cb00:2048:1::681c:116e) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
*   CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none
* NSS error -12286 (SSL_ERROR_NO_CYPHER_OVERLAP)
* Cannot communicate securely with peer: no common encryption algorithm(s).
* Error in TLS handshake, trying SSLv3...
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: www.xxxxxx.com
> Accept: */*
>
* Connection died, retrying a fresh connect
* Closing connection 0
* Issue another request to this URL: 'https://www.xxxxxx.com'
* About to connect() to www.xxxxxx.com port 443 (#1)
*   Trying 2400:cb00:2048:1::681c:116e...
* Connected to www.xxxxxx.com (2400:cb00:2048:1::681c:116e) port 443 (#1)
* TLS disabled due to previous handshake failure
*   CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none
* NSS error -12286 (SSL_ERROR_NO_CYPHER_OVERLAP)
* Cannot communicate securely with peer: no common encryption algorithm(s).
* Closing connection 1
curl: (35) Cannot communicate securely with peer: no common encryption algorithm(s).

Tôi đã liên lạc với CloudFlare về vấn đề này và họ nói rằng vì cURL đang cố gắng kết nối bằng SSLv3 và họ đã vô hiệu hóa nó vì lỗ hổng POODLE. Tôi có thể kết nối với cURL v7.38.0 trên FreeBSD 10, nhưng không có vấn đề gì với cURL v7.29.0 trên CentOS 6.5.

Nếu đó là vì nó đang cố gắng kết nối với SSLv3, vậy làm cách nào để tắt SSLv3 trên cURL? Hay nó là cái gì khác?


1
Hãy thử nâng cấp nss.
jordanm

1
Một điều quan trọng không kém cần làm là cho phép curl sử dụng TLS. Curl của bạn dường như không có khả năng xử lý giao thức TLS, đó là lý do tại sao nó lại rơi vào SSLv3 ngay từ đầu. Việc vô hiệu hóa SSLv3 sẽ khiến bạn không thể thực hiện bất kỳ loại kết nối SSL nào vì dường như bạn không có khả năng TLS. Tôi sẽ cập nhật chủ đề / bình luận này nếu tôi có thể tìm thấy một cái gì đó.
Citylight

Câu trả lời:


8

Có vẻ như sự cố này là do phiên bản cURL không hỗ trợ chứng chỉ SSL 256 bit ECC và thuật toán chữ ký ECDSA (được CloudFlare sử dụng). Bạn có thể kiểm tra xem phiên bản cURL của bạn có hỗ trợ mã hóa này hay không bằng cách chạy:

curl -1IsS --ciphers ecdhe_ecdsa_aes_128_sha https://sslspdy.com

Nếu bạn nhận được những điều sau đây, thì cURL của bạn đã hết hạn:

curl: (59) Unknown cipher in list: ecdhe_ecdsa_aes_128_sha

Mặt khác, nếu nó kết nối và không hiển thị lỗi thì đó là cập nhật.

Vì CentOS dường như sàng lọc kỹ lưỡng các bản cập nhật trước khi chúng được áp dụng cho các gói của họ, thật khó để nói khi nào nó sẽ được sửa. Cách DUY NHẤT để khắc phục điều này là bằng cách cập nhật cURL, vượt qua -khoặc --insecuresẽ không hoạt động.


Lưu ý có vấn đề đàm phán cũng có. IE chỉ định --ciphers như bạn làm ở trên hoạt động, nhưng điều đó hiện đang được yêu cầu
Pádraig Brady

Cảm ơn câu trả lời này. Tôi đang sử dụng CentOS 6.6 chín tháng sau và nó vẫn gây ra sự cố. Ít nhất bây giờ tôi biết tại sao.
Dejay Clayton

Tôi đang chạy CentOS v7.1.1503 (với tất cả các bản cập nhật đến ngày 15 tháng 7 năm 2015) và CHỈ hoạt động CHURL nếu --ciphers ecdhe_ecdsa_aes_128_shađược chỉ định. NSS error -12286 (SSL_ERROR_NO_CYPHER_OVERLAP)
Mặt
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.