使用相同 HTTPS 客户端证书在并发会话的 IIS 上收到 413 错误

2023-11-22

我有以下问题。

我在 IIS 8 上托管一个 WCF 应用程序,它接受only带有客户端证书的 HTTPS 请求。此服务接受大小可能不同(从几个字节到最大 1 GB)的 POST 消息,并且大多数时间都是并行接收的。

在以下情况下,客户端会收到 413 请求实体太大响应:

  • 当打开多个连接时same上传了客户端证书和很多小文件。在这种情况下,一个请求成功,而所有其他请求均失败并出现 413 错误。

该问题可以通过设置来解决uploadReadAheadSize值大于所有并行调用大小的总和system.webServer/serverRuntime配置部分,但这会导致服务器为每个调用的预读缓冲区分配全部内存,从而导致服务器在许多并发调用的情况下耗尽内存。

我的配置works如果调用的是不同的客户端证书或上传一个大文件的情况。

我读过,在 IIS 6 中,有一个选项可以设置SSLAlwaysNegoClientCert在配置中修复类似的错误。我努力了解决方法设置此值,但使用 IIS 8.0 没有成功。我还尝试关闭 SSL 客户端缓存以禁用 SSL 会话恢复,但这也没有解决我的问题。

什么可能导致 413 错误?有什么方法可以使用客户端证书将多个并行上传到同一服务器,而不使用服务器的整个内存。


只是一个猜测:

如果客户要求重新协商,请求实体主体必须使用 SSL 预加载进行预加载。 SSL 预加载将使用 UploadReadAheadSize 配置数据库属性的值,该属性用于 ISAPI 扩展。但是,如果UploadReadAheadSize小于内容长度,则会返回HTTP 413错误,并关闭连接以防止死锁。(发生死锁是因为客户端正在等待完成发送请求实体,而服务器正在等待重新协商完成,但重新协商要求客户端能够发送数据,而服务器不能这样做)。

(摘自文章客户端无法重新协商请求并返回 HTTP 413 错误 (IIS 6.0).)

未设置 SSLAlwaysNegoClientCert 时会发生客户端重新协商,因此请使用 OpenSSL 检查是否已启用(请参阅这个问题)。我没有使用过 IIS 8,但在 IIS 7.5 上,启用 SSLAlwaysNegoClientCert 的两种方法你链接的问题为我工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用相同 HTTPS 客户端证书在并发会话的 IIS 上收到 413 错误 的相关文章

随机推荐