2015-05-29 26 views
2

截至前幾天,Authorize.net upgraded their certificates so that they are signed using (SHA-2)在Heroku的Rails中使用Authorize.net AIM API的自定義證書

我們的客戶現在就從Authorize.net返回此錯誤:

SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed

所以我需要在Heroku我們的Rails應用程序來使用它們。 Heroku的根證書不包含這些,所以我必須將它們包含在ActiveMerchant中,但是我沒有找到明確的指示說明如何正確執行此操作。這是我迄今爲止所嘗試的:

我已經下載了Authorize.net要求的五個根證書,並將它們作爲「cacert.pem」鏈接在一起,替換了我的應用程序中現有的「cacert.pem」文件/vendor/plugins/active_merchant/lib/certs/文件夾(爲了以防萬一,我先備份了舊的cacert.pem文件)。這本身並沒有解決問題 - 我仍然在開發中遇到同樣的錯誤。

看着我創造了新的「cacert.pem」文件,我看到的是,在鏈(https://cacert.omniroot.com/bc2025.crt)的最後一個證書是這樣的:

0Çw0Ç_†��π0 *ÜHܘ �0Z10 UIE10U Baltimore10U CyberTrust1"0 UBaltimore CyberTrust Root0 000512184600Z 250512235900Z0Z10 UIE10U Baltimore10U CyberTrust1"0 UBaltimore CyberTrust Root0Ç"0 *ÜHܘ �Ç�0Ç Ç�£ª"´ò=WË&röµy‘)‚·Ëïı∞„[é+)ödfl°]Ì∞ m€(.Œb¢b˛¥à⁄Î8Î!ù¿A+R{àw」è«∫πàµj ÁsË@ߗàbç-Âè¶P「®P√(Íı´%áäöñ©g∏?’˜˘R/¬’ppè¿ Àö·Ÿ 3zw÷¯ÏπÒhDBH「¿¬§Æ^``˛∂¶¸¥›Y‘Yòcı•c‡ê}]≤zÛÖÍΑÆ^Ñ>_ˇÌiº˘96ruœwRMÛ…ê,π=Â…#S?$ò!\ô)Ω∆:ÏÁnÜ:kótc3Ωh1xçvø¸ûé]*ÜßMê‹'9�£E0C0UÂùY0ÇGXè˙T6Ü{:µM0Uˇ0ˇ0Uˇ0 *ÜHܘ �Ç�Ö]é‰oQhB†›ªO'%ÑΩ˜d˝-◊0„§Î⁄))∂y?vˆ#∏ ˘X§‘apΩajä’ Ω≈º0|÷È%çÜ@OÏã~8∆7OÌ›h1éL「≥tÓæu^Hpˇ\Ñ¿yÖ∏˝æe£¿¥¯R79’©1zø†*Ùô˜£EÇ„<^ıùûµ»û|.»§ûNKm˝pmkcΩdÊ∑ŒÚü.ª∑ÚPàsí¬‚„çö2´é›ÈÓ~5´êØ>0îz–3=ßeı¸éûbœGD,]ªµ2「G「8.–˛Å‹2jµÓ<’¸ÁÅ√$BÍc9©

所以我刪除的希望,這部分我至少有一個有效的文件。不知道這是否有幫助,因爲我仍然收到錯誤消息。

我也試圖改變ActiveMerchant的connection.rbconfigure_ssl方法,改變

http.ca_file = File.dirname(__FILE__) + '/../../certs/cacert.pem'

http.ca_file = Rails.root + "app/vendor/plugins/active_merchant/lib/certs/cacert.pem"

我不知道如果這實際上指出了我的cacert.pem文件正確,因爲我無法從此文件寫入開發日誌。我甚至不知道這個文件是否會被正確的指向文件。這個在線信息嚴重缺乏。

我的網站一直關閉,直到我解決了這個問題。我處於完全恐慌狀態。任何想法,我需要看看/我需要做什麼?

+0

我以前見過這個,而且一個rekey解決了我的問題。 – Noah

+0

看看這個:https://devcenter.heroku.com/articles/ssl-endpoint – Noah

+0

我的網站的SSL證書正常工作。這不是您指定連接到Authorize.net的AIM API時由ActiveMerchant使用的自定義證書的位置。我指出了我由Heroku Support領導的方向,它告訴我「這看起來像一個Ruby應用程序,我在這裏看到一些不同的HTTP客戶端庫。如果你閱讀文檔,通常有一個選項叫做ca_path或ca_file或ca_bundle將成爲您添加到包含您要使用的證書的應用程序的目錄。「 – digijim

回答

2

感謝您的文章,我能夠得到解決這個確切的問題。我在不同的服務器上安裝了最新的activemerchant gem,並將cacert.pem從新gem複製到我的非工作服務器的/ vendor/plugins/active_merchant/lib/certs /目錄中。重新啓動Apache並能夠成功處理cc。

可能是一種解決方法,但至少現在我們可以再次接受付款。

+0

很高興我能(有點?)幫助。我找到了一個不同的解決方案,結果非常簡單,只是沒有清楚地記錄在我能找到的任何地方。希望我們的答案能夠幫助那些可能遇到這個問題的人。 – digijim

1

我能夠自己解決這個問題,謝天謝地,這很簡單。我很高興我也備份了舊的cacert.pem文件!

我只是複製了舊的cacert.pem文件的內容,並將其粘貼到我的新cacert.pem文件的開頭。我也忽略了上面提到的gobbledegook Baltimore Cyber​​Trust Root證書。

我還將ActiveMerchant的connection.rbconfigure_ssl方法返回到原始狀態。

TL; DR

鏈的新證書後所有的舊證書在cacert.pem一起。繁榮!完成。下一個!

相關問題