2011-08-21 90 views
1

我有一個Rails網站(reccr.com)使用omniauth驗證與幾個不同的選項,包括Facebook和Twitter的用戶(使用OAuth)和其他一些(使用OpenID)。不過最近,(我認爲的最後一個星期左右的時間內)試圖通過Twitter進行身份驗證拋出獲得「OpenSSL的讀取服務器證書B:證書驗證失敗」的錯誤,但只爲Twitter的

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

錯誤,但只有Twitter的做它;所有其他服務的身份驗證都很好。我一直在尋找一個解決方案,但我能找到的所有錯誤都解決了所有身份驗證提供程序出現的情況,我無法找到適用於只發生在一個特定提供程序中的情況。

就我所知(而且我是唯一的開發者),本網站沒有任何改變可以預測這一點,我認爲,任何改變網站,這將導致與Twitter的這個問題也會導致與Facebook OAuth身份驗證相同的問題。

關於如何解決這個問題的任何想法?我最初希望問題出在Twitter上,他們會在幾天內解決問題,但這個問題已經過去了大約一週,而且還在進行中,而且我還沒有看到任何其他Twitter特有的關於此錯誤的投訴所以我開始懷疑這畢竟是我。

編輯:好的,在發現THISTHIS後,我已經到了一半了。我試圖在我的omniauth.rb中添加一個:client_options => {:ca_file => '#{Rails.root}/config/ca-bundle.crt'}到該行的末尾來實現該解決方案,我將Twitter聲明爲我的提供者之一。但是,當我這樣做時,我得到wrong number of arguments (4 for 3)錯誤在lib/rack/builder.rb:54:in initialize'`。任何想法如何修復

+0

你從哪裏得到你的證書?編輯:我不好,你是否實際上通過SSL連接,並在回調中拋出此錯誤? –

+0

我不確定。我使用OmniAuth進行身份驗證,因此我爲其處理了很多事情;我應該在哪裏看? – luvcraft

+0

現在忽略,檢查我的答案,看看是否解決了你的問題。 –

回答

1

通常這個錯誤意味着,紅寶石不能找到一組本地機器驗證那些從服務器提供,見證書,如果這個博客帖子可以幫助你。 http://martinottenwaelter.fr/2010/12/ruby19-and-the-ssl-error/

+0

我在我的omniauth初始化程序中有這個: 'require「openid/fetchers 「; OpenID.fetcher.ca_file =「#{Rails.root} /config/ca-bundle.crt」' (並且我有我的ca-bundle.crt在正確的地方) 但這是我得到的最接近https設置。 – luvcraft

+0

那麼這裏只有兩個選項。您的ca-bundle存在問題並且無法進行身份驗證,或者Twitter使用的證書無效。我的錢存在於你的捆綁軟件中,也許檢查他們是否使用未包含在你的軟件包中的CA. –

1

OK,原來是一堆東西。

微博改變了他們的SSL證書,如提及HERE。 (我不能讀取昨晚因爲dev.twitter.com跌!)

Omniauth使用OAuth,它具有強制其使用特定的CA文件,而不是更廣泛的CA路徑的錯誤,如詳細HERE

解決的辦法之一是初始化你在omniauth提供商時指定正確的CA文件,但我一直得到「錯誤的參數數目」錯誤,當我試圖做到這一點。在我完全卸載並重新安裝rails的一系列意外事故發生後,它不再給我這個錯誤,所以我能夠爲omniauth添加該規範,現在它可以再次向Twitter進行身份驗證!萬歲!

不幸的是,在某個地方所有這一切停止它能夠驗證給Facebook,但我敢肯定我能弄清楚爲什麼會發生的事情。

相關問題