【问题标题】:Delphi: idHttp+SSL Get 403 Forbidden from ServerDelphi:idHttp+SSL 从服务器获取 403 Forbidden
【发布时间】:2018-08-21 22:54:36
【问题描述】:

一段时间以来,我们通过 HTTPS 与我们的服务器通信正常。

上周供应商改变了一些东西,从现在开始我总是得到 403 错误。

我使用最新的 OpenSSL DLLs V0.9.8
我已将 UserAgent 更改为“Mozilla/5.0 (Windows NT 10.0)”
SSL 方法是“sslvSSLv23”
SSL 模式为“sslmClient”

没有任何帮助。 :(

这是我得到的日志:

SSL 状态:“正在解析主机名 msselektronik.at。” SSL 状态:“正在连接到 85.158.181.20。” SSL StatusInfoEx: Type="Handshake Start", Msg="before/connect initialization" SSL StatusInfoEx:Type="连接循环",Msg="之前/连接初始化" SSL StatusInfoEx: Type="Connect Loop", Msg="SSLv2/v3 write client hello A" SSL StatusInfoEx: Type="Connect Loop", Msg="SSLv3 read server hello A" SSL StatusInfoEx: Type="Connect Loop", Msg="SSLv3 read server certificate A" SSL StatusInfoEx: Type="Connect Loop", Msg="SSLv3 读取服务器密钥交换 A" SSL StatusInfoEx: Type="Connect Loop", Msg="SSLv3 read server done A" SSL StatusInfoEx: Type="Connect Loop", Msg="SSLv3 write client key exchange A" SSL StatusInfoEx: Type="Connect Loop", Msg="SSLv3 write change cipher spec A" SSL StatusInfoEx: Type="Connect Loop", Msg="SSLv3 write finished A" SSL StatusInfoEx:Type="连接循环",Msg="SSLv3 刷新数据" SSL StatusInfoEx: Type="Connect Loop", Msg="SSLv3 read finished A" SSL StatusInfoEx: Type="Handshake Done", Msg="SSL 协商成功完成" SSL StatusInfoEx: Type="Connect Exit", Msg="SSL 协商成功完成" SSL StatusInfoEx: Type="warning Read Alert", Msg="close notify" SSL 状态:“已断开连接。” 响应文本:HTTP/1.1 403 禁止

在 Wireshark 日志中,我在“客户端密钥交换”之后看到从服务器到客户端的“加密警报”。

编号 时间 源 目的地 协议 长度 信息 4 1.563661 192.168.0.30 85.158.181.20 SSLv2 181 客户端你好 6 1.590865 85.158.181.20 192.168.0.30 TLSv1 1514 服务器你好 10 1.605380 85.158.181.20 192.168.0.30 TLSv1 1348 证书,服务器密钥交换,服务器你好完成 12 1.638612 192.168.0.30 85.158.181.20 TLSv1 380 客户端密钥交换、更改密码规范、加密握手消息 13 1.676523 85.158.181.20 192.168.0.30 TLSv1 113 更改密码规范,加密握手消息 14 1.679066 192.168.0.30 85.158.181.20 TLSv1 320 应用数据,应用数据 15 1.711226 85.158.181.20 192.168.0.30 TLSv1 587 应用数据 16 1.711227 85.158.181.20 192.168.0.30 TLSv1 91 加密警报 19 1.713426 192.168.0.30 85.158.181.20 TLSv1 91 加密警报

我该怎么做才能让通信重新开始?

【问题讨论】:

  • 这个问题与SSL无关。您甚至收到 HTTP 错误这一事实意味着 SSL 工作正常,这在您显示的日志跟踪中得到了证明。 SSL 握手成功,然后来回交换 HTTP 数据。因此,与 SSL 无关的 HTTP 请求存在其他问题。您需要与 Provider 讨论他们所做的更改,并让他们帮助您解决 HTTP 请求的问题。
  • 顺便说一句,0.9.8 甚至还远没有成为 OpenSSL 的最新版本。 Indy 10 支持的最新版本的 OpenSSL 是 1.0.2n。您需要更新您的 OpenSSL DLL,可能还需要更新您的 Indy 安装以支持它们。

标签: delphi ssl https indy10 idhttp


【解决方案1】:

我找到了“403 Forbidden”错误的原因。

在 Apache error.log 中,我发现“没有通过 SNI 为基于名称的虚拟主机提供主机名”条目

这将我带到了 NameBasedSSLVHostsWithSNI 页面。

那里描述了确切的行为:

客户端不支持 SNI。

如果 Apache 支持 SNI,并且通过 SSL 收到基于名称的虚拟主机的不带 SNI 主机名的请求,并且 SSLStrictSNIVHostCheck 已打开,则它将被拒绝 (403) 并记录此消息:

[错误] 没有通过 SNI 为基于名称的虚拟主机提供主机名

如果 SSLStrictSNIVHostCheck 关闭,则请求将被视为服务器不支持 SNI。

看起来我们的提供商已经更改了配置,所以我必须更新我的 Indy 源以支持 SNI 并更新我的派生类。

感谢您的帮助。

【讨论】:

    猜你喜欢
    • 2019-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-16
    • 2020-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多