2016-08-02 104 views
1

我已经问过Embacadero技术支持的这个问题,在那里提出了一个案例,但也想知道如果有人在这里知道这个答案。Delphi肥皂请求者 - 访问TLS1.1/TLS1.2的问题

我在一家零售公司工作,并使用Delphi编写了他们的Mail Order程序。

该程序严重依赖的一件事是处理信用卡数据。从第一天起,这从来就不是什么大问题。我们的网关提供商是英国的Verifone,到目前为止,我已经使用SOAP请求者与Verifone处理服务器交谈。我没有太多的问题得到这个工作,它从那以后一直工作。虽然我不是自称是SOAP调用方面的专家。这个软件出于组件遗留的原因,仍然驻留在D2007中,并且很好。我仍然可以根据需要进行开发。

“周二2016年10月4日,VeriFone公司将作出以下修改:

直到现在......

昨天我载明下列收到一封电子邮件从Verifone的 1将安全证书从SHA-1升级到更安全的SHA-256算法
2.退出对SSL v3和TLS v1.0的支持。

他们提供了一个链接到这个网页:

http://www.verifone.co.uk/support/ssl

首先,我并不过于担心,我们已经在过去的一些类似的变化(虽然主要是证书的变化),这不是招不会影响我们。但是我读得越多,我就越有点担心。

所以我决定我最好跑一些测试。在第二个选项卡上的该页面上,有一些测试网址。我将我们现有的测试网址(我们用于系统培训的测试网址)与新的测试网址进行了交换,并且......失败了。我得到的错误:

“与服务器的连接不能建立 - 网址:http://xml-cst.cxmlpg.com/gateway/gateway.asmx - 的SOAPAction:https://www.commidea.webservices.com/GetServerStatus

或类似的这张截图是一个实际的测试信用卡支票,而不是服务器状态检查:

enter image description here

这只是做一个简单的“GetServerStatus”调用,它不需要帐户或凭据。我知道服务器在Chrome中使用这个URL工作:

https://xml-cst.cxmlpg.com/gateway/gateway.asmx?op=GetServerStatus

我开始怀疑这是否是在为D2007 SOAP调用组件的问题。

所以昨天晚上我在Seatlle家里试了一下。我的想法是,如果我至少能够到达那里,那么我可以在西雅图写一个实用程序,它只是与D2007邮购订单套件一起处理信用卡。使用WSDL进口商

https://xml-cst.cxmlpg.com/gateway/gateway.asmx?wsdl

,并增加了一个按钮到窗体调用GetServerStatus功能(在我得到了D2007原来的工作方法相同):我进口的WSDL从

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

印与D2007提供可能不支持[TLS1.1](https://tools.ietf.org/html/rfc4346)(2006年4月作为RFC发布)或[TLS1.2](https://tools.ietf.org/ html/rfc5246)(在2008年8月发布为RFC)你必须更新Indy for D2007在西雅图,使用Indy 10并在SSLOptions.SSLVersions中指定'[sslvTLS1_1,sslvTLS1_2]' –

+0

嗨,感谢您的回复和对问题的看法,这不是使用Indy,而是使用Delphi从https://xml-cst.cxmlpg.com/gateway/gateway.asmx?wsdl导入WDSL,然后使用THTTPPRIO组件电话。这适用于旧的URL,但不再连接新的URL。 – Trevor

+0

Delphi SOAP可能使用Indy(请参阅http://stackoverflow.com/a/24936972/6517492)而不是Wininet。如果Chrome浏览器显示测试网址没有错误,我想这是可行的,因为Chrome不使用Wininet。 – mjn42

回答

2

看来SOAP服务器返回的HTTP URL为其服务在发布的WSDL(而他们应该是HTTPS)。 如果您控制SOAP服务器,则应该修复WSDL生成器。 (如果它在Delphi编写它很可能只是缺少自己的TWSDLHTMLPublish.PublishOptions财产poPublishLocationAsSecure选项。 客户端上的可能的解决方法可能是直接和不使用(HTTPS)URL依靠发布的WSDL。

+1

嗨,只是一个快速更新。我昨晚在D2007版本上试了这个,它也解决了这个问题。所以我不需要做任何大的重写或独立的实用程序。英巴卡迪诺技术支持回来了相同的答案。我已将此问题报告给Verifone,但看起来可能需要一点说服力,因为迄今为止所有答复都符合“您指的是哪一点”的说法,尽管清楚地说明了哪些wsdl及其哪部分是不正确的!无论如何,只是想更新,并再次表示感谢的帮助,并指出我在正确的方向。 – Trevor

+0

欢迎,并感谢您的更新。 –