gpt4 book ai didi

ruby-on-rails-3 - 使用 Active Merchant for Moneris 的 OpenSSL 错误

转载 作者:太空宇宙 更新时间:2023-11-03 12:52:47 25 4
gpt4 key购买 nike

我的生产应用程序使用 ActiveMerchant,无法使用单一网关 Moneris 通过 https 处理信用卡。所有其他网关 Authorize.net、Paypal、Beanstream 等)都没有遇到任何错误。我收到的错误是:

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

Moneris 的人告诉我他们已经更新了他们的 SSL 证书 到 2048 位 SSL 加密(从当前的 1024 位 SSL 加密)并且升级后的证书将由 VeriSign 颁发。我们的通配符 SSL 使用 2432——超过了 Moneris 2047 的要求。

因此,他们建议除了我通常为我的 SSL 包上传的文件外,我还必须添加他们的 Verisign 证书。我的 Heroku 命令如下所示:

$ heroku certs:upgrade --app myapp AddTrustExternalCARoot.crt ComodoUTNSGCCA.crt EssentialSSLCA_2.crt STAR_myapp_com.crt UTNAddTrustSGCCA.crt Verisign_chain_Gr.cer Verisign_G5.cer server.key

我几乎尝试了所有方法,包括此处的 fix_ssl.rb 建议 ( OpenSSL::SSL::SSLError on Heroku ),我从 Heroku 的/usr/lib/ssl/certs 目录调用 ca-certificates.crt。

require 'open-uri'
require 'net/https'

module Net
class HTTP
alias_method :original_use_ssl=, :use_ssl=
def use_ssl=(flag)
self.ca_path = Rails.root.join('/usr/lib/ssl/certs/ca-certificates.crt').to_s
self.verify_mode = OpenSSL::SSL::VERIFY_PEER
self.original_use_ssl = flag
end
end
end

我已经尝试了所有方法:将 Heroku 包放在我的/lib 目录中,添加“经过认证”的 gem 等等,并在电话上花了几个小时与 Moneris 无果。有谁知道我还能做些什么来让这个网关处理信用卡?

最佳答案

我的猜测是 openssl 用来验证 Moneris 的服务器证书的可信 CA 证书列表已经过时。因此,请尝试从 Mozilla 的 ca-bundle 中提取 cacert.pem(http://curl.haxx.se/docs/caextract.html 为您完成)。就 openssl 而言,这几天更有必要,因为 openssl 不再与 CA 证书捆绑在一起,这就是为什么我怀疑您使用的任何 ca-certs 可能已过时。

首先,我尝试使用以下命令重现您的问题:

openssl s_client -connect www3.moneris.com:443

得到...

New, TLSv1/SSLv3, Cipher is RC4-MD5Server public key is 2048 bitSecure Renegotiation IS supportedCompression: NONEExpansion: NONESSL-Session:    Protocol  : TLSv1.2    Cipher    : RC4-MD5    Session-ID: 73178D4019035AE86399D0E6D2FFB904A1412D0F5D3F83370E52F50E9E26B73C    Session-ID-ctx:     Master-Key: 0BB841912F11185B7CBAFA524571765DD7372990819EBC44E311DE4EF0C70E480501D6F87C8AA439C4F827B0908123F7    Key-Arg   : None    PSK identity: None    PSK identity hint: None    SRP username: None    Start Time: 1380816775    Timeout   : 300 (sec)    Verify return code: 20 (unable to get local issuer certificate)---

然后我使用了从 Mozilla 中提取的 cacert.pem,感谢 http://curl.haxx.se/docs/caextract.html并像这样重新发出 openssl 命令:

openssl s_client -connect www3.moneris.com:443 -CAfile cacert.pem

得到...

New, TLSv1/SSLv3, Cipher is RC4-MD5Server public key is 2048 bitSecure Renegotiation IS supportedCompression: NONEExpansion: NONESSL-Session:    Protocol  : TLSv1.2    Cipher    : RC4-MD5    Session-ID: 73178D401902F7EB6399D0E6D2FFB804CE0F7219344405EA0E52F50E9E26B4DB    Session-ID-ctx:     Master-Key: C0B32810FB7E0158A156E7D05DBB35F3CE8935284F165C3FB636700EEEC8BCE991BCE8850D39020E298F337B6E58132A    Key-Arg   : None    PSK identity: None    PSK identity hint: None    SRP username: None    Start Time: 1380816992    Timeout   : 300 (sec)    Verify return code: 0 (ok)---

所以在上面的代码片段中,尝试替换:

self.ca_path = Rails.root.join('/usr/lib/ssl/certs/ca-certificates.crt').to_s

与:

self.ca_file = <full path name>/cacert.pem

其中 cacert.pem 是从 Mozilla ca-bundle 中提取的

关于ruby-on-rails-3 - 使用 Active Merchant for Moneris 的 OpenSSL 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19127090/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com