SSL_connect 返回=1 errno=0 状态=错误:证书验证失败(无法获取本地颁发者证书)

2023-11-23

我正在尝试从我的应用程序发布到网络服务,但经常收到以下错误。

SSL_connect returned=1 errno=0 state=error: certificate verify failed (unable to get local issuer certificate)

我用compassplus发出的crt文件和我自己生成的密钥文件发送post请求。

def payment
    @booking = 12

    uri = URI("https://test.compassplus.com:8444/Exec")
    xml = Builder::XmlMarkup.new
    xml.instruct! :xml, :version => '1.0'
    xml.TKKPG {
        xml.Request {
            xml.Operation("CreateOrder")
            xml.language("EN")
            xml.Order {
                xml.OrderType("Purchase")
                xml.Merchant("123456")
                xml.Amount("10000")
                xml.Currency("840")
                xml.Description("Tour Purchase")
                xml.ApproveURL("/thankyou.html")
                xml.CancelURL("/error.html")
                xml.DeclineURL("/declined.html")
                xml.email("")
                xml.phone("")
                xml.AddParams {
                    xml.FADATA("")
                    xml.SenderPostalCode("")
                    xml.AcctType("")
                    xml.TranAddendums("")
                    xml.TranAdddendumsVISA("")
                    xml.TranAdddendumsMC("")
                    xml.TranAdddendumsAMEX("")
                    xml.TranAdddendumsJCB("")
                    xml.OrderExpirationPeriod("")
                    xml.OrigAmount("")
                    xml.OrigCurrency("")
                }
            }
        }
    }
    http = Net::HTTP.new(uri.host, uri.port)
    http.use_ssl  = true
    http.ssl_version = :TLSv1_2
    http.verify_mode  = OpenSSL::SSL::VERIFY_PEER
    http.ca_file = File.read(File.join(Rails.root, "/crt/gvtrek.com.pem"))

    @request = http.post(uri, xml)
end

当我从本地主机发送 post 请求时出现 SSL 错误,当我从生产环境发送请求时出现超时。我无法弄清楚问题所在。帮我解决它。我正在 macOS Mojave 上工作。


经过大量测试,我找到了正确的解决方案。问题出在证书文件声明上。

我尝试使用捆绑的证书文件(example.com.pem)发送发布请求

http.ca_file = File.read(File.join(Rails.root, "/crt/example.com.pem"))

因此,我用每个 crt 和密钥文件更改了上述声明

http.cert = OpenSSL::X509::Certificate.new(File.read(File.join(Rails.root, "/crt/example.com.crt")))
http.key = OpenSSL::PKey::RSA.new(File.read(File.join(Rails.root, "/crt/example.com.key")))
req = Net::HTTP::Post.new(uri.path, initheader = {'Content-Type' =>'application/xml'}).

现在它起作用了。

完整代码

uri = URI("https://test.compassplus.com:8444/Exec")
xml = "
<TKKPG>
    <Request>
    <Operation>CreateOrder</Operation> 
    <Language></Language>
    <Order>
        <OrderType>Purchase</OrderType>
        <Merchant>99999</Merchant>
        <Amount>10000</Amount>
        <Currency>524</Currency>
        <Description>Tour Purchase</Description>
        <ApproveURL>/approve.html</ApproveURL>
        <CancelURL>/cancel.html</CancelURL>
        <DeclineURL></DeclineURL>
        <email></email>
        <phone></phone>
        <AddParams>
            <FA-DATA></FA-DATA>
            <SenderPostalCode></SenderPostalCode>
            <AcctType></AcctType> 
            <TranAddendums></TranAddendums> 
            <TranAddendumsVISA></TranAddendumsVISA> 
            <TranAddendumsMC></TranAddendumsMC> 
            <TranAddendumsAMEX></TranAddendumsAMEX> 
            <TranAddendumsJCB></TranAddendumsJCB> 
            <OrderExpirationPeriod></OrderExpirationPeriod> 
            <OrigAmount></OrigAmount> 
            <OrigCurrency></OrigCurrency>
        </AddParams>
        <Fee></Fee> 
    </Order>
    </Request>
</TKKPG>
"
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl  = true
http.ssl_version = :TLSv1_2
http.cert = OpenSSL::X509::Certificate.new(File.read(File.join(Rails.root, "/crt/example.com.crt")))
http.key = OpenSSL::PKey::RSA.new(File.read(File.join(Rails.root, "/crt/example.com.key")))
req = Net::HTTP::Post.new(uri.path, initheader = {'Content-Type' =>'application/xml'})
@res = http.request(req, xml)

参考。

用于 Ruby 的 HTTP 库是否具有 HTTPS、SSL 客户端证书和 Keep-Alive 支持?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SSL_connect 返回=1 errno=0 状态=错误:证书验证失败(无法获取本地颁发者证书) 的相关文章

随机推荐

  • 为什么要使用 urlencode?

    我正在编写一个 Web 应用程序并学习如何对 html 链接进行 urlencode 这里的所有 urlencode 问题 参见下面的标签 都是 如何 问题 我的问题不是 如何 但为什么 即使维基百科的文章也只讨论了它的机制 http en
  • 移动 NumPy 数组中的所有索引

    我有一个像这样的 numpy 数组 x np array 0 1 2 3 4 想要创建一个数组 其中索引 0 中的值位于索引 1 中 索引 1 中的值位于索引 2 中 依此类推 我想要的输出是 y np array 0 0 1 2 3 我猜
  • 在命令行中制作java包

    虽然它可能是推荐使用的 IDE 来编码高级 java 项目 但我个人更喜欢几乎完全运行命令行 使用 gedit 作为文本编辑器 所以请不要只是告诉我 就用 eclipse 吧 或其他什么 P 我的问题是在java中通过命令创建包的方法是什么
  • 使用 group by 进行 SQL 连接的 HQL 版本

    我有两张表 Band 和 Votes Band 有一个名称和一个 id Votes 有一个 Total votes 列和一个名为 band id 的外键 该外键指向 band id 我有很多选票 在不同日期保存 我想要做的是找到每个频段的
  • 如何使用 readline 支持重新安装 ruby​​?

    我已经按照 RVM 的说明安装了 Rubyhttps github com wayneeseguin rvm installation 作为信息 我有所有档案 readline 5 2 tar gz readline 6 2 tar gz
  • 在 java eclipse 控制台中更改颜色

    有没有办法改变eclipse控制台中的文本颜色 我不是在谈论当我进入选项并将颜色从黑色更改为红色时 我的意思是 就像当我启动程序并执行代码时 它会在某个时刻改变颜色 例如 code if a 2 change text color to r
  • SimpleCov 报告使用 Spork 运行 RSpec 测试后未在 Rails 3 应用程序中生成

    我刚刚安装了简单冠状病毒gem 在我的 Rails 3 2 6 应用程序上生成代码覆盖率报告 它与 RSpec 配合得很好 但与 Spork 配合不好 我可以通过运行获得所需的正确报告rspec no drb spec 但我也想让它们与 S
  • 没有删除语句的 MySQL 复制

    我一直在寻找一种方法来防止MySQL删除语句被从站处理 我正在从事数据仓库项目 我想在将数据复制到从站后从生产服务器中删除数据 完成这件事的最佳方法是什么 谢谢 做这件事有很多种方法 Run SET SQL LOG BIN 0 在执行删除之
  • 如何交错流(带背压)

    假设我有两个可能无限的流 s1 a b c d e s2 1 2 3 4 5 6 7 我想要merge流 然后使用缓慢的异步操作映射合并流 例如 在 Bacon 中 fromPromise and flatMapConcat 我可以将它们与
  • 服务器端多次TIME_WAIT的代价是多少?

    假设有一个客户端与服务器建立了大量短期连接 如果客户端关闭连接 会出现很多端口TIME WAIT在客户端声明 由于客户端耗尽了本地端口 因此无法快速尝试新的连接 如果服务器关闭连接 我会看到很多TIME WAIT在服务器端 然而 这有什么坏
  • SQL 在 WHERE 子句中合并

    我正在尝试在我拥有的存储过程中实现可选参数 但遇到了问题 这是一个简化的查询来说明该问题 SET ANSI NULLS OFF DECLARE MiddleName VARCHAR 20 SET MiddleName NULL SELECT
  • NumberFormat 解析不够严格

    我有一个JFormattedTextField with a NumberFormat与 Locale US 因此小数点分隔符是点 分组分隔符是逗号 现在 我在此文本字段中键入字符串 1 23 并将焦点移至另一个组件 我希望该字符串会消失
  • Hibernate 升级:StatisticsService()

    我正在将 hibernate 从 3 6 升级到 4 3 5 更换后 jar文件和一些已弃用的包 类以及基本数据类型我仍然遇到一些错误StatisticsService 在org hibernate jmx包裹 错误如下 1 error p
  • Ruby on Rails:在布局中的特定位置生成特定视图

    如果我有一个标记 然后我的所有视图都会呈现在布局中的同一位置 我可以有不同的吗不同视图的标签 那我该怎么办呢 谢谢 调查ActionView Helpers CaptureHelper 您可以在您的视图中执行以下操作 这将在 content
  • 复制 QTableView 的一部分

    因此 我有一个问题与我在这里看到的另一个问题非常密切相关 但当我尝试在那里提出我的问题时 我没有得到答复 我希望通过提出这个新问题 有人可以帮助我 基本上我只想复制我创建的表格的一部分 以便我可以将其粘贴到 Excel 文件中 这是我所拥有
  • Python 中的 SSLSocket 密码/密码

    我最近一直在考虑为我的一个应用程序制作 iOS 推送通知服务 它有一个 Python 2 7 后端 所以我想用 Python 而不是 PHP 或其他任何东西 来完成它 我有发送通知并且设备接收通知的代码 但是每次运行该代码时 它都会要求我手
  • 如何将 Javascript 日期时间转换为 C# 日期时间?

    我一直在读到 如果你想从 JavaScript 日期转换为 C 日期 你应该使用getTime 然后将该结果添加到 C DateTime 假设我有这样的 JavaScript 时间 Date Tue Jul 12 2011 16 00 00
  • 如何为iPhone创建一个黑色渐变的UIButton?

    我想在 iOS 中创建一个具有普通黑色渐变主题的 UIButton 我查看了文档 似乎不知道如何执行此操作 当我创建按钮时 我得到一个没有颜色的圆角矩形按钮 这是我的代码 UIButton leagueTeamButton UIButton
  • C++ 当从函数返回结构体时,汇编中实际发生了什么?

    我试图弄清楚如果从函数中按值返回结构 而不是返回指向该结构的指针 那么在 C 中实际会发生什么 如果函数只能返回适合寄存器的值 那么当按值发送结构时 如何进行通信 我在某处读到过 我尝试在 Godbolt 上测试它 看看它在做什么 但我不了
  • SSL_connect 返回=1 errno=0 状态=错误:证书验证失败(无法获取本地颁发者证书)

    我正在尝试从我的应用程序发布到网络服务 但经常收到以下错误 SSL connect returned 1 errno 0 state error certificate verify failed unable to get local i