Delphi 7 / Indy 9应用程序未通过SSL连接到Apache

时间:2012-03-28 15:32:33

标签: apache delphi ssl openssl indy

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

以下是我认为可能会有一些输入的一些差异: 我最初是以通配符证书开始的。它是有效的,并且在正确的域上。它适用于我们在许多服务器上的其他所有功能。 2.认为通配符证书可能比Indy 9更新,我删除了通配符证书,并使用完整的机器名称输入自签名证书。它以同样的方式失败了。但是,如您所知,浏览器会使用这些自签名证书颁发证书例外,因此我不确定这是否会给Indy带来问题。 3.我确信我们的新开发服务器上的OpenSSH版本比我们生产服务器上当前的版本更新。如果有人认为它会有所帮助,我可以挖出这些确切的版本。

这是我继承的应用程序,因此我对SSL和Indy的了解有限。这个应用程序已经过了它的生命,因此升级到Indy 10并不是我公司将要资助的东西。任何帮助或指示或提示都非常受欢迎,我的谢意将是无限的。 非常感谢Stackers!

2 个答案:

答案 0 :(得分:3)

没有提到正在发生的具体错误,因此很难提供没有特定错误消息的建议。

1)跟踪您在SSL握手中收到的实际响应,并尝试对消息进行反复调整。 (DoStatusInfo())

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

这是使用openssl.exe快速测试连接性。尝试连接到测试盒和生产机器以查看是否建立了连接。您也可以尝试使用v3来验证或消除这种猜测...如果它们的行为相同,那么请专注于#1。 :)

openssl s_client -ssl2 -connect yourhost:443

答案 1 :(得分:2)

尝试在sslvrfPeer属性中启用TIdSSLIOHandlerSocket.VerifyMode标记,然后在True事件中返回TIdSSLIOHandlerSocket.OnVerifyPeer