2012-03-28 134 views
0

我们有一个应用程序使用Indy 9建立在Delphi 7中,用于连接到运行在Linux上的PHP后端的https连接。该应用程序连接到我们当前的生产服务器没有问题。我们一直在为这个应用程序构建一个测试环境,并在测试Web服务器上拒绝使用https进行连接。该应用程序已经能够使用http连接到这个服务器。我可以使用应用程序进行的相同Web调用来连接任何当前的浏览器(没有尝试过旧的浏览器),并且我获得了连接,并且数据完美恢复,所以显然Indy 9中有一些东西阻止了它的工作。是为什么这个问题在这里,而不是在ServerFault上)有没有人有足够的经验与Indy/SSL知道这里发生了什么?Delphi 7/Indy 9应用程序无法通过SSL连接到Apache

下面是我认为可能有一些输入的几个区别: 1.我最初是从通配符证书开始的。这是有效的,并在正确的域名。它与我们在许多服务器上的其他所有功能一起工作。 2.认为通配符证书可能比Indy 9更新,我删除了通配符证书,并将自签名证书和完整的机器名称一起放入。它以同样的方式失败。但是,正如你所知,浏览器发布了一个证书例外与这些自签名的证书,所以我不确定这是否也会给Indy问题。 3.我确定我们的新开发服务器上的OpenSSH版本比我们生产服务器上的新版本要新。如果有人认为它有帮助,我可以挖掘出这些确切的版本。

这是我继承的应用程序,所以我对SSL和Indy的知识有限。这个应用程序是在它的生命的尽头,所以升级到Indy 10不是我公司要资助的东西。任何帮助或指示或提示都非常受欢迎,我的感谢将是无限的。 非常感谢你堆垛机!

+0

您是否设置了一些断点或将一些OutputDebugString或CodeSite日志消息放入?你至少应该详细说明你从发现错误的过程中发现了什么。 “不连接?”怎么样? – 2012-03-28 20:46:59

回答

3

没有提及正在发生的特定错误,因此提供建议时不会出现特定的错误消息是很困难的。

1)追踪您在SSL握手中收到的实际响应,并尝试制作消息的正面或反面。 (DoStatusInfo())

2)(大猜测在这里)SSL连接有不同的版本,其中旧版本已过期,不再支持。如果你正在构建一个新的服务器,它可能会有与当前生产机器不同的默认设置,我假设这是一个更老的版本。 (它越老,这个猜测就越适用。)较新的服务器应该有希望拒绝连接到SSL V2和V3(并且只允许TLS)。因此,这可能是旧生产服务器和新测试服务器的配置不同而这个新版本会过滤出旧的SSL版本并阻止握手继续。 (这将显示在#1的握手失败中,这是您真正用于回答此问题的工具。)

下面是使用openssl.exe进行连接的快速测试。尝试连接到测试盒和生产计算机以查看连接是否已建立。你也可以尝试v3,以验证或消除这个猜测......如果他们采取相同的行动,那么专注于#1。 :)

openssl s_client -ssl2 -connect yourhost:443 
2

尝试使sslvrfPeer国旗在TIdSSLIOHandlerSocket.VerifyMode属性,然后在TIdSSLIOHandlerSocket.OnVerifyPeer事件中返回True

相关问题