2014-10-18 86 views
0

我想在MacOSX上的Ruby應用程序中發出API請求。OpenSSL :: SSL :: SSLError與自制軟件OpenSSL握手失敗

當我嘗試這樣的事:

RestClient.get("https://api.foursquare.com/v2/venues/explore?near=NYC&query=McDonalds") 

我得到這個(與當它是http):

OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server hello A: sslv3 alert handshake failure 
from /Users/sasha/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/net/http.rb:920:in `connect' 

(如果我嘗試(open("https://...")),我得到這個:

OpenURI::HTTPError: 400 Bad Request 
from /Users/sasha/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/open-uri.rb:353:in `open_http' 

我看了一些關於這方面的討論,特別是this one導致我相信這是我的OpenSSL沒有找到正確的cert.pem文件的問題。我使用Homebrew,並且我的Homebrew OpenSSL安裝在/usr/local/bin中。我想,OpenSSL的原始Mac版本是/usr/bin

我跟着建議,以一個全球性的ENV變量SSL_CERT_FILE設定的路徑,我cert.pem文件通過自制的安裝 - /usr/local/etc/openssl/cert.pem, - 當我回顯變量,它被設置正確,但是當我重新打開一個Ruby控制檯並再試一次,我得到相同的錯誤。關於我在做什麼錯的想法?我對OpenSSL瞭解不多,而且我完全被這個漏掉了,因爲它似乎正在找到我的證書。

編輯

當我運行which openssl,它顯示了Mac版 - /usr/bin/openssl。這是有道理的,給家釀的安裝筆記:

A CA file has been bootstrapped using certificates from the system 
keychain. To add additional certificates, place .pem files in 
    /usr/local/etc/openssl/certs 

and run 
    /usr/local/opt/openssl/bin/c_rehash 

This formula is keg-only, which means it was not symlinked into /usr/local. 

Mac OS X already provides this software and installing another version in 
parallel can cause all kinds of trouble. 

The OpenSSL provided by OS X is too old for some software. 

Generally there are no consequences of this for you. If you build your 
own software and it requires this formula, you'll need to add to your 
build variables: 

    LDFLAGS: -L/usr/local/opt/openssl/lib 
    CPPFLAGS: -I/usr/local/opt/openssl/include 

是這樣的問題?我包含給我的OpenSSL版本的錯誤的cert.pem文件?

回答

1

狀態= SSLv3的讀取服務器問候答:SSLV3警報握手失敗

這通常不是一個壞或丟失證書的問題,但該服務器不喜歡客戶端發送的東西,像不支持的SSL版本或客戶端提供的適當密碼。 如果我嘗試使用SSL3.0而不是TLS1.0或更高版本連接,則此主機出現此錯誤,因此請確保您不再使用SSL3.0。

如果這不能幫助捕獲流量的數據包並將其發佈到cloudshark.org,以便可以查看流量​​詳細信息。

+0

謝謝!我不太瞭解SSL。如何檢查我是否使用SSL3.0或TLS1.0 +?我的Homebrew安裝的OpenSSL是最新的?任何建議的工具,使流量的數據包捕獲? – Sasha 2014-10-18 20:21:18

+0

對於流量捕獲使用wireshark或tcpdump。您使用的是哪個SSL版本取決於您擁有的openssl版本以及您爲限制版本所做的任何設置。 – 2014-10-19 07:18:51