我已经问过Embacadero技术支持这个问题,在那里提出了一个案例,但是也想知道这里是否有人知道答案。
我在一家零售公司工作,并在德尔福编写了他们的邮购程序。
该计划严重依赖的一件事是处理信用卡数据。从第一天开始,这从来就不是一个问题。我们的网关提供商是英国的Verifone,到目前为止,我已经使用SOAP请求者与Verifone处理服务器进行通信。我没有太多的问题让这个工作,从那以后它一直有效。我不承认自己是SOAP调用等方面的专家。出于组件遗留原因,该软件仍然存在于D2007中,并且它很好。我仍然可以根据需要开发它。
直到现在......
昨天我收到了来自Verifone的电子邮件,说明了以下内容:
" 2016年10月4日星期二,Verifone将进行以下更改: 1.将安全证书从SHA-1升级到更安全的SHA-256算法 2.退出对SSL v3和TLS v1.0的支持。"
他们提供了此页面的链接:
http://www.verifone.co.uk/support/ssl
首先,我并不过分担心,我们过去曾经有过类似的变化(虽然主要是证书变更)但这并没有对我们产生影响。但是我读的越多,我就越关注它。
所以我决定最好进行一些测试。在第二个选项卡上的该页面上,有一些测试URL。我将现有的测试URL(我们用于系统培训的测试URL)与新的测试URL交换了......它失败了。我收到错误:
"无法建立与服务器的连接 - 网址:http://xml-cst.cxmlpg.com/gateway/gateway.asmx - SOAPAction:https://www.commidea.webservices.com/GetServerStatus"
或类似于此屏幕截图,这是一个实际测试信用卡检查而不是服务器状态检查:
这只是做了一个简单的GetServerStatus'呼叫,不需要帐户或凭据。我知道服务器正在Chrome中使用此网址:
https://xml-cst.cxmlpg.com/gateway/gateway.asmx?op=GetServerStatus
我开始怀疑这是否是D2007中SOAP调用的组件中的一个问题。
所以昨晚我在Seatlle的家里试了一下。我的想法是,如果我至少可以去那里,那么我可以在西雅图写一个小实用程序,只是坐在D2007 Mail Order套件旁边处理信用卡。我从以下位置导入了WSDL:
https://xml-cst.cxmlpg.com/gateway/gateway.asmx?wsdl
使用WSDL导入器并向表单添加一个按钮来调用GetServerStatus函数(与我在D2007中使用原始函数的方式相同):
procedure TForm1.Button1Click(Sender: TObject);
var
gs : GatewaySoap;
begin
gs := (HTTPRIO1 as GatewaySoap);
gs.GetServerStatus
end;
我伸出手指,然后点击按钮。
唉,我收到了与上面相同的错误消息。所以现在我假设它与Delphi版本完全无关。
这是一个非常可怕的问题,因为它基本上完全阻止了邮件订购软件的自动化功能。如果我无法使用简单的GetServerfStatus,那么我就完全失去了。
有没有人知道这里发生了什么?是不是我不能通过SOAP请求者进行非SSL / TLS1.0?它看起来必须是TLS1.1 / 1.2。我该如何解决这个问题?我现在猜测,如果它可以解决西雅图,那么相同的解决方案可能适用于D2007中的现有邮件订单代码。
真的希望有人可以帮我解决这个问题!我昨晚很晚才尝试不同的东西,但是无法掌握它。它实际上可能是我刚刚忽略的东西,简单的东西 - 这是我的希望。然后,我怀疑它可能是更具技术性的东西。
特雷弗
答案 0 :(得分:2)
似乎SOAP服务器在已发布的WSDL中为其服务返回http URL(而它们应该是https)。
如果您控制SOAP服务器,则应修复WSDL生成器。 (如果它是用Delphi编写的,很可能只是在poPublishLocationAsSecure
属性中缺少TWSDLHTMLPublish.PublishOptions
选项。
客户端上可能的解决方法可能是直接使用(https)URL而不依赖于已发布的WSDL。