使用Http / 2和Windows身份验证(SPNEGO,Kerberos,协商)在Windows上卷曲

时间:2018-12-20 00:23:13

标签: windows authentication curl kerberos http2

我一直试图在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连接到其余端点。

我从Microsoft的一位前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大文件SSPI Kerberos SPNEGO NTLM SSL libz TLS-SRP HTTP2 HTTPS-代理MultiSSL Metalink

1 个答案:

答案 0 :(得分:1)

HTTP/2

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

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