用 RVM 裝的 ruby 出現 SSLError

這兩天在玩 Google Drive 的 API,用的是 google_drive 這個 gem,但在 SSL 連線時,卻出現了這樣的 error:

2.2.1 :027 > auth = client.authorization.fetch_access_token!
Faraday::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed

照 rvm 自己的 faq: How to fix broken certificates in your operating system.,可以執行 rvm osx-ssl-certs update all

$ rvm osx-ssl-certs update all
Updating certificates for /etc/openssl/cert.pem: Already up to date.

不過似乎沒有解決。後來查到 Fixing failing SSL-certificate verification with RVM/OSX Yosemite,發現是因為透過 rvm 安裝 binary 的 ruby,會造成 openssl 的一些連結錯誤,以致無法找到正確的 certificates,解決方法就是用原始碼重編 ruby,也就是加上 --disable-binary 參數。

$ rvm install 2.2 --disable-binary

重編的時間會比用 binary 安裝慢一些,然後有一些 gem 可能也要用 gem pristine 重編。不過這樣 SSLError 就解決了。