【问题标题】:Curl on windows using Http/2 and windows authentication ( SPNEGO, Kerberos, Negotiate)使用 Http/2 和 Windows 身份验证(SPNEGO、Kerberos、Negotiate)在 Windows 上卷曲
【发布时间】:2019-05-20 12:27:07
【问题描述】:

我一直在尝试在 Windows 上获取 curl 版本 7.63 以连接到 HTTP/2 REST api 并使用 Windows 身份验证。

REST 端点设置为执行“协商”,并在“加入域”的 Windows 服务器上运行。因此它将从 Windows DC KDC 获得 kerberos 委派。

这一切都在 http/1.1 中有效,但如果我尝试强制 curl 使用 http/2,它将恢复为 http/1.1

当我使用“基本”身份验证时,curl 可以使用 http/2 连接到其余端点。

我从微软的一位前 IIS 工程师那里找到了这篇博文,其中说 IIs 不支持带有 Windows 身份验证的 Http/2。 https://blogs.iis.net/davidso/http2

因为我的 REST 端点在标头中对此作出响应: 服务器:Microsoft-HTTPAPI/2.0

我相信它使用与 IIS 相同的库,这可能是它无法处理 Windows 身份验证的原因(需要 Windows 身份验证来处理 SSO,这样用户就不需要输入他的凭据)。

这是 http/2 规范中的限制,还是只是 microsoft 库和 IIS 中的限制?

curl 7.63.0 (x86_64-w64-mingw32) libcurl/7.63.0 OpenSSL/1.1.1a (WinSSL) zlib/1.2.11 libidn2/2.0.5 nghttp2/1.35.1 发布日期:2018-12-12 协议: dict 文件 ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smtp smtps telnet tftp 功能:AsynchDNS IDN IPv6 Largefile SSPI Kerberos SPNEGO NTLM SSL libz TLS-SRP HTTP2 HTTPS-proxy MultiSSL Metalink

【问题讨论】:

    标签: windows authentication curl kerberos http2


    【解决方案1】:

    HTTP/2

    在少数情况下,HTTP/2 不能与其他功能结合使用。在这些情况下,Windows 将回退到 HTTP/1.1 并继续事务。这可能涉及在握手期间协商 HTTP/1.1,或者向客户端发送错误代码,指示它通过 HTTP/1.1 连接重试。

    HTTP/2 不支持 Windows 身份验证 (NTLM/Kerberos/Negotiate)。在这种情况下,IIS 将回退到 HTTP/1.1。 明文 - 如上所述,IIS 目前仅支持 HTTP/2 over TLS。同样,IIS 将回退到 HTTP/1.1。 带宽限制 - IIS 具有限制带宽的功能(在 Inetmgr 中,选择站点,在操作窗格的配置下选择“限制”)。这适用于 HTTP/1.1,但不适用于 HTTP/2(不会出现错误或带宽限制)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-25
      • 2019-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多