我有一个带有 IdServerIOHandlerSSLOpenSSL 的 IdHTTPServer,它需要在连接期间通过设置 AuthRealm 进行登录。 这是供政府组织用来查看特定数据的。
但是他们拥有庞大的安全系统,并且其网络上的网络浏览器不接受或从未收到初始基本身份验证请求。他们最终直接返回 401:未经授权。
我认为这是因为当初始登录/密码请求发送到 Web 浏览器时,连接的 SSL 加密似乎尚未建立,因此被阻止。我也可以在我自己的网络浏览器中看到这一点。 https 尚未激活。
基于 HTTP 的身份验证是 HTTP 请求本身的一部分。您必须通过
https:
url 发送请求,以确保在传输 HTTP 请求之前使用 SSL/TLS 保护连接。切勿使用 http:
url 请求基于 HTTP 的身份验证! HTTP
BASIC
身份验证本身并不安全,因为它只是使用 base64 以纯文本形式传输客户端的凭据。因此必须事先确保连接安全。无论如何,您提供的屏幕截图清楚地表明正在使用
https:
网址。因此,是的,在客户端发送 HTTP 请求并因此收到身份验证质询之前,必须在连接上激活 SSL/TLS 加密。如果不是这种情况,
TIdHTTPServer
将根本无法与任何 HTTPS 客户端通信。
TIdHTTPServer
可以很好地处理 HTTPS,前提是您已正确设置它,即:
TIdServerIOHandlerSSLBase
派生组件分配给
TIdHTTPServer.IOHandler
属性(听起来像您所做的那样)
TIdSSLIOHandlerSocketBase(AContext.Connection.IOHandler).PassThrough
事件中将
False
属性设置为
TIdHTTPServer.OnConnect
(默认情况下
TIdHTTPServer
在标准 HTTPS 端口 443 上为您处理)。
TIdHTTPServer
监听端口 443 吗?您是否已将
TIdSSLIOHandlerSocketOpenSSL
配置为使用强加密、身份验证等?有很多因素在起作用,但您没有提供详细信息。
但是,在新西兰警察系统上,基本身份验证被完全忽略,它立即进入 401:未经授权。 可悲的是,我无法访问他们的系统,而且我不明白为什么会发生这种情况。我真的认为这是因为 SSL 尚未建立。 所以事实并非如此..