วิธีแก้ไขข้อผิดพลาดการจับมือการแจ้งเตือนของ curl sslv3?


27

ฉันพยายามขดเว็บไซต์ HTTPS ด้วยวิธีต่อไปนี้:

$ curl -v https://thepiratebay.se/

อย่างไรก็ตามมันล้มเหลวด้วยข้อผิดพลาด:

* About to connect() to thepiratebay.se port 443 (#0)
*   Trying 173.245.61.146...
* connected
* Connected to thepiratebay.se (173.245.61.146) port 443 (#0)
* SSLv3, TLS handshake, Client hello (1):
* SSLv3, TLS alert, Server hello (2):
* error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure
* Closing connection #0
curl: (35) error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure

การใช้-k/ --insecureหรือการเพิ่มinsecureของฉัน~/.curlrcไม่ได้สร้างความแตกต่าง

ฉันจะเพิกเฉยหรือบังคับใช้ใบรับรองโดยใช้curlบรรทัดคำสั่งได้อย่างไร


เมื่อใช้wgetดูเหมือนว่าจะทำงานได้ดี ใช้ได้เมื่อทดสอบกับopensslด้านล่าง:

$ openssl s_client -connect thepiratebay.se:443
CONNECTED(00000003)
SSL handshake has read 2651 bytes and written 456 bytes
New, TLSv1/SSLv3, Cipher is AES128-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1
    Cipher    : AES128-SHA

ฉัน:

$ curl --version
curl 7.28.1 (x86_64-apple-darwin10.8.0) libcurl/7.28.1 OpenSSL/0.9.8| zlib/1.2.5 libidn/1.17
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smtp smtps telnet tftp 
Features: IDN IPv6 Largefile NTLM NTLM_WB SSL libz 

คำตอบ:


20

บางเว็บไซต์การสนับสนุนสำหรับการปิดการใช้งาน SSL 3.0 (เป็นไปได้เพราะการหาประโยชน์หลาย / ช่องโหว่) ดังนั้นจึงเป็นไปได้ที่จะบังคับให้รุ่น SSL โดยเฉพาะอย่างใดอย่างหนึ่ง-2/ --sslv2หรือ/-3 --sslv3นอกจากนี้ยัง-Lควรลองดูหากหน้าเว็บที่ร้องขอย้ายไปที่อื่น

ในกรณีของฉันมันเป็นcurlข้อผิดพลาด ( พบใน OpenSSL ) ดังนั้นcurlจำเป็นต้องอัปเกรดเป็นเวอร์ชันล่าสุด (> 7.40) และทำงานได้ดี

ดูสิ่งนี้ด้วย:


ใช่การอัพเกรดขดแก้ไขปัญหาสำหรับฉัน ขอบคุณ
Simon East

Curl รุ่นล่าสุดไม่ชอบรหัส RC4 ที่ล้าสมัยซึ่งเซิร์ฟเวอร์เก่าอาจยังใช้อยู่ดังนั้นฉันจึงใช้ "--ciphers RC4" เพื่ออนุญาตเป็นพิเศษ
maxpolk

@SimonEast คุณใช้ ugprade เวอร์ชั่นไหนเป็นเวอร์ชั่นไหน?
Olle Härstedt

5

เริ่มต้นด้วย Mavericks Apple เปลี่ยนกลไก TLS / SSL จาก OpenSSL เป็นเอ็นจิ้น Secure Transport ใน Apple แจกจ่าย cURL ไบนารีซึ่งแบ่งการใช้ใบรับรองของลูกค้า ใช้ไบนารี cURL จาก homebrew:

brew install curl
brew link curl --force

1
brew link curl --forceไม่ทำงานอีกต่อไปคุณต้องใส่export "$(brew --prefix curl)/bin:$PATH". bash_profile แทน
Lars Nyström

1

ฉันมีข้อผิดพลาดนี้เมื่อฉันส่งส่วนหัวของโฮสต์ที่ไม่ถูกต้อง

ผมได้รับการพัฒนาพร็อกซี่จากhttp://127.0.0.1:12345เพื่อhttps://site.com:443 ดังนั้นฉันจึงส่งคำขอส่วนหัวตามที่เป็นมาจากเบราว์เซอร์และมีโฮสต์: 127.0.0.1: 12345 ส่วนหัว ฉันลบส่วนหัวของโฮสต์ที่มาจากเบราว์เซอร์เพื่อแก้ไขปัญหา

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.