在我们的项目中我们有客户的证书认证
然而,由于某种原因,在100个tomcat发布之后,似乎什么都不起作用
我们得到任何一个 400 HTTP
响应或证书头为空(如果我们设置 rejectIllegalHeader="false"
)当我们通过 nginx
示例(标题值),名称- ssl_client_cert
:
"-----BEGIN CERTIFICATE-----\x0A\x09MIIFXDCCA0SgAwIBAgIBBDANBgkqhkiG9w0BAQsFADBHMQ...
\x0A\x09-----END CERTIFICATE-----"
或者 ssl_client_raw_cert
```
"-----BEGIN CERTIFICATE-----\x0AMIIFXDCCA0SgAwIBAgIBBDANBgkqhkiG9w0BAQsFADBHMQsw ...
y2EmDsw=\x0A-----END CERTIFICATE-----\x0A"
我想这是罪魁祸首
https://github.com/apache/tomcat/commit/ae8c82eff96990878e79691819ae941538ee62fd#diff-d4454b2c33deae44a2c2f5cd354aa3ca70c6a268e78c4fd5e1f76fcebc0181ba型
在第100版之前,一切正常
绕过我们使用的 `ssl_client_escaped_cert` 相反。
"-----BEGIN%20CERTIFICATE-----%0AMIIFXDCCA0SgAwIBAgIBBDANBgkqhkiG9 ...
qgt0Tzy2EmDsw%3D%0A-----END%20CERTIFICATE-----%0A"
现在我们必须在java代码中手动取消它的scape
String certificateInfo = URLDecoder.decode(request.getHeader(headerName), "UTF-8");
有没有办法让tomcat接受第100版或更高版本的非转义证书?
1条答案
按热度按时间xkftehaa1#
不,不能将tomcat配置为允许http头值大于0x0a。这些变化是对cve-2020-1935的回应。
另一方面,我假设nginx正在执行客户端身份验证,并将经过验证的客户端证书传递给tomcat。