我的生产应用程序使用 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 建议( Heroku 上的OpenSSL::SSL::SSLError),我从 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 的电话上花费数小时无济于事。有谁知道我还能做些什么来让这个网关处理信用卡?