in `connect': SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (OpenSSL::SSL::SSLError)


最近在用ruby的一些庫的時候,總是出現這個錯誤

在使用net/imap庫的時候,或者net/http庫(主要是用到了https,https是用了ssl) 的時候,具體如下:

 

錯誤提示:E:/Ruby200/lib/ruby/2.0.0/net/imap.rb:1454:in `connect': SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (OpenSSL::SSL::SSLError)

 

由提示可以得出,是證書驗證失敗了。為什么呢?

SSL連接,是安全套接層連接,是在傳輸層對數據進行加密從而保護網絡通信中傳輸的數據。使用這個的時候就需要ssl證書。而ruby中是默認不驗證證書的,在net/http庫的源碼里

有一個實例變量@use_ssl = false,使用ssl默認為假,也就是不使用。(這個我也不太懂,可以忽略)

 

 

具體來說,步驟如下

1.下載證書。有的證書好像太早了,不起作用。我用了的是這個http://curl.haxx.se/docs/caextract.html,在這個界面下載cacert.pem就可以了,這個就是證書了。

2.然后將證書放在合適的位置。一般是ruby或者rails安裝地方的根目錄下,例如我的:E:\Ruby200\cacert.pem

3.設置環境變量,在命令行(cmd)里,輸入 set SSL_CERT_FILE=E:\Ruby200\cacert.pem,這只是臨時的環境變量。如果要是固定的環境變量,轉下一步。

4.置固定環境變量。win7下 控制面板->系統和維護->系統->高級系統設置(或者 改變設置->高級),進入環境變量,選擇系統變量,新建。輸入如下

這樣就可以了。

 

具體參考:https://gist.github.com/fnichol/867550,感謝作者。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM