使用 PHP 5.6.9(从 PHP 5.4 更改)升级到 Debian 8 后,我在使用 HTTPS 端点地址调用 SOAP Web 服务时收到此警告:
Warning: SoapClient::__doRequest(): SSL operation failed with code 1. OpenSSL Error messages:
error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch
接着是 SoapFault:
Fatal error: Uncaught SoapFault exception: [HTTP] Error Fetching http headers
使用网络服务 URL 调用 file_get_contents 不会触发此警告。
我没有在这个 SOAP 调用上为 ssl 设置任何流上下文选项。
您是否知道此警告在这种情况下意味着什么以及如何正确摆脱它?
编辑
在我的特定用例中,我调用了两个 Web 服务方法:A 和 B。方法 A 在没有警告的情况下工作,然后在其结果上调用了一些 openssl 方法,然后调用了触发警告的方法 B。当我删除对方法 A 的调用并从缓存中加载其结果时,方法 B(和任何其他方法)在没有警告的情况下工作。这很奇怪 - 我需要进一步调查。
EDIT2
我已提取问题并使其可测试。似乎以下情况会导致此警告:
openssl_pkcs12_read。下面是使用一些公开可用的 SOAP 网络服务和自签名证书的示例。
<?php
$p12 = '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';
$sc = new SoapClient('https://finanzonline.bmf.gv.at/fon/services/FileUploadWSI/wsdl/FileUploadWSIService.wsdl');
var_dump($sc->GetVersion());
$result = openssl_pkcs12_read(base64_decode($p12), $cert_data, 'qwerty');
var_dump($cert_data);
var_dump($sc->GetVersion());
有人可以测试这个脚本吗?在 PHP 版本 5.6.9-0+deb8u1 中,OpenSSL 1.0.1k 2015 年 1 月 8 日 我没有得到 GetVersion 调用的第二个结果,并且警告和错误。
EDIT3
PHP 7 Alpha 1 中的结果相同。报告为 Bug #69882 .
最佳答案
我已经确认这是 PHP 错误,并在 PHP 5.6.7 中引入,提交 fd4641696cc67fedf494717b5e4d452019f04d6f .
解决方法是在之后调用 openssl_error_string()
openssl_pkcs12_read()。
A pull request已提交以解决此问题 - merged
关于php - PHP 5.6 中的 SoapClient 在使用 HTTPS 时发出带有 "key values mismatch"的警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30730846/
我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou
我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-
为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar
我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test
我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que
我正在尝试编写一个将文件上传到AWS并公开该文件的Ruby脚本。我做了以下事情:s3=Aws::S3::Resource.new(credentials:Aws::Credentials.new(KEY,SECRET),region:'us-west-2')obj=s3.bucket('stg-db').object('key')obj.upload_file(filename)这似乎工作正常,除了该文件不是公开可用的,而且我无法获得它的公共(public)URL。但是当我登录到S3时,我可以正常查看我的文件。为了使其公开可用,我将最后一行更改为obj.upload_file(file
当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub
我在新的Debian6VirtualBoxVM上安装RVM时遇到问题。我已经安装了所有需要的包并使用下载了安装脚本(curl-shttps://rvm.beginrescueend.com/install/rvm)>rvm,但以单个用户身份运行时bashrvm我收到以下错误消息:ERROR:Unabletocheckoutbranch.安装在这里停止,并且(据我所知)没有安装RVM的任何文件。如果我以root身份运行脚本(对于多用户安装),我会收到另一条消息:Successfullycheckedoutbranch''安装程序继续并指示成功,但未添加.rvm目录,甚至在修改我的.bas
下面的代码在我第一次运行它时就可以正常工作:require'rubygems'require'spreadsheet'book=Spreadsheet.open'/Users/me/myruby/Mywks.xls'sheet=book.worksheet0row=sheet.row(1)putsrow[1]book.write'/Users/me/myruby/Mywks.xls'当我再次运行它时,我会收到更多消息,例如:/Library/Ruby/Gems/1.8/gems/spreadsheet-0.6.5.9/lib/spreadsheet/excel/reader.rb:11
我正在学习Ruby的基础知识(刚刚开始),我遇到了Hash.[]method.它被引入a=["foo",1,"bar",2]=>["foo",1,"bar",2]Hash[*a]=>{"foo"=>1,"bar"=>2}稍加思索,我发现Hash[*a]等同于Hash.[](*a)或Hash.[]*一个。我的问题是为什么会这样。是什么让您将*a放在方括号内,是否有某种规则可以在何时何地使用“it”?编辑:我的措辞似乎造成了一些困惑。我不是在问数组扩展。我明白了。我的问题基本上是:如果[]是方法名称,为什么可以将参数放在括号内?这看起来几乎——但不完全是——就像说如果你有一个方法Foo.d