IdhttpServer 基本身份验证未加密?

问题描述 投票:0回答:2

我有一个带有 IdServerIOHandlerSSLOpenSSL 的 IdHTTPServer,它需要在连接期间通过设置 AuthRealm 进行登录。 这是供政府组织用来查看特定数据的。

但是他们拥有庞大的安全系统,并且其网络上的网络浏览器不接受或从未收到初始基本身份验证请求。他们最终直接返回 401:未经授权。

我认为这是因为当初始登录/密码请求发送到 Web 浏览器时,连接的 SSL 加密似乎尚未建立,因此被阻止。我也可以在我自己的网络浏览器中看到这一点。 https 尚未激活。

有办法解决这个问题吗?在发送基本身份验证请求之前,我可以以某种方式强制 SSL 连接吗?

delphi https indy10
2个回答
0
投票

基于 HTTP 的身份验证是 HTTP 请求本身的一部分。您必须通过

https:
url 发送请求,以确保在传输 HTTP 请求之前使用 SSL/TLS 保护连接。切勿使用 http:
 url 请求基于 HTTP 的身份验证! HTTP 
BASIC
 身份验证本身并不安全,因为它只是使用 base64 以纯文本形式传输客户端的凭据。因此必须事先确保连接安全。

无论如何,您提供的屏幕截图清楚地表明正在使用

https:

 网址。因此,是的,在客户端发送 HTTP 请求并因此收到身份验证质询之前,必须在连接上激活 SSL/TLS 加密。如果不是这种情况,
TIdHTTPServer
 将根本无法与任何 HTTPS 客户端通信。

TIdHTTPServer

 可以很好地处理 HTTPS,前提是您已正确设置它,即:

  1. TIdServerIOHandlerSSLBase

     派生组件分配给 
    TIdHTTPServer.IOHandler
     属性(听起来像您所做的那样)

  2. 在 SSL/TLS 侦听端口的

    TIdSSLIOHandlerSocketBase(AContext.Connection.IOHandler).PassThrough

     事件中将 
    False
     属性设置为 
    TIdHTTPServer.OnConnect
    (默认情况下 
    TIdHTTPServer
     在标准 HTTPS 端口 443 上为您处理)。

所以,无论你遇到什么问题,都与其他问题有关。你有

TIdHTTPServer

 监听端口 443 吗?您是否已将 
TIdSSLIOHandlerSocketOpenSSL
 配置为使用强加密、身份验证等?有很多因素在起作用,但您没有提供详细信息。


0
投票
我显示的问题似乎是特定于我的本地主机的,可能是因为我的开发电脑上的某些设置不正确。 查看实际服务器,是的,我现在看到 SSL 处于活动状态。

但是,在新西兰警察系统上,基本身份验证被完全忽略,它立即进入 401:未经授权。 可悲的是,我无法访问他们的系统,而且我不明白为什么会发生这种情况。我真的认为这是因为 SSL 尚未建立。 所以事实并非如此..

© www.soinside.com 2019 - 2024. All rights reserved.