当前位置: 首页 > 知识库问答 >
问题:

对Moneris使用活动商家时出现OpenSSL错误

扶冠宇
2023-03-14

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

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

莫内里斯的人告诉我,他们已经将他们的SSL证书更新为2048位SSL加密(从当前的1024 SSL加密),升级后的证书将由VeriSign颁发。我们的通配符 SSL 使用 2432-- 比 Moneris 2047 要求更多。

因此,他们建议除了我通常为SSL包上传文件外,我还必须添加他们的威瑞信证书。我的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建议(开放SSL::SSL::赫洛上的SSL:SSL错误),我从我的/usr/lib/ssl/certs目录中调用ca-certificate.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目录中,添加“认证”宝石等。花了几个小时和Moneris打电话,但没有用。有人知道我还能做些什么来允许这个网关处理信用卡吗?

共有1个答案

茹建茗
2023-03-14

我猜想openssl用来验证Moneris服务器证书的CA证书的可信列表已经过期。所以,试着找一个仙人掌。从Mozilla的ca包中提取的pem(http://curl.haxx.se/docs/caextract.html为您做这件事)。现在,就openssl而言,这更为必要,因为openssl不再与CA证书捆绑在一起,这就是我怀疑您使用的任何CA证书都可能过时的原因。

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

打开s_client -连接 www3.moneris.com:443

并且得到了...


New, TLSv1/SSLv3, Cipher is RC4-MD5
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-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命令,如下所示:

OpenSLs_client-连接www3.moneris.com:443-CAfilecacert.pem

并且得到了...


New, TLSv1/SSLv3, Cipher is RC4-MD5
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-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

其中,从莫兹拉卡束中提取卡塞尔特佩姆

 类似资料:
  • 我在清单文件中为我的一个活动定义了一个意图过滤器。当我试图使用以下命令从adb外壳启动此活动时: $adb shell am start 我得到以下错误: 开始:Intent{act=android.Intent.action.VIEW dat=http://www.example.com/gizmospkg=com。实例Android} 错误:活动未启动,无法解析Intent{act=andro

  • 当我尝试从一个活动()切换到另一个活动()时出错。我做错了什么?我的代码没有错误。 以下是日志猫的内容: E/AndroidRuntime(787): FATAL EXCEPTION: main E/AndroidRuntime(787): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.intellig

  • 我有一个应用程序,包括使用ActionBarSherlock在标签模式。我有5个标签,每个标签的内容都是使用片段处理的。然而对于tab2,我有一个片段,其中的xml文件包含一个ViewPager元素,该元素反过来又有一些片段页面。当我最初启动应用程序时,我可以在选项卡之间切换,没有问题,但是当我第二次按下选项卡2时,我就会出现上面提到的错误。主要活动如下: 不带ViewPager的fragment

  • 我对GoogleAPI有些问题。 这是错误。 条件:jdk 1.8,Tomcat 8.5 请帮我解决这个错误。

  • 自从我将Android Studio从1.5更新到2.1以来,我已经多次遇到以下错误(不总是)。这是“运行”对话框的输出: 但奇怪的是,在logcat中什么也找不到。我真的不知道是什么原因导致了这种情况,因为这个错误并不能说明出了什么问题,除了StartActivity的启动出了问题(自更新以来,我几乎没有改变,甚至根本没有改变)。 我的清单文件: 有人知道如何解决这个问题吗? 编辑: 在我从lo

  • 问题内容: 我试图使用pip在virtualenv中安装pycurl,但出现此错误 我读了一些文档,说 “要解决此问题,您需要告诉setup.py使用了什么SSL后端” (源),尽管由于使用pip安装了pycurl,所以我不确定该怎么做。 使用pip安装pycurl时如何指定SSL后端? 谢谢 问题答案: 读取他们的INSTALLATION文件后,我可以通过设置环境变量解决问题并重新安装 删除现有