【问题标题】:Client's certificate authentication issue in Tomcat in 7.0.100+7.0.100+ 中 Tomcat 中的客户端证书身份验证问题
【发布时间】:2020-11-19 11:48:27
【问题描述】:

我们的项目中有客户的证书认证

但是,出于某种原因,在 100 次 Tomcat 发布后似乎没有任何效果

当我们通过nginx 代理到应用程序时,我们得到400 HTTP 响应或证书头为空(如果我们设置rejectIllegalHeader="false"

示例(标头的值),名称 - 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 代码中手动取消转义

 String certificateInfo = URLDecoder.decode(request.getHeader(headerName), "UTF-8");

有没有办法让 Tomcat 在第 100 版及更高版本中接受非转义证书?

【问题讨论】:

    标签: java tomcat http-headers x509certificate


    【解决方案1】:

    不,您无法将 Tomcat 配置为允许 HTTP 标头值包含 0x0A。这些更改是针对CVE-2020-1935 进行的。

    顺便说一句,我假设 Nginx 正在执行客户端身份验证并将经过验证的客户端证书传递给 Tomcat。

    【讨论】:

    • 非常感谢,至少现在我们知道我们必须修改我们的代码
    猜你喜欢
    • 2012-06-10
    • 2023-04-10
    • 2012-05-30
    • 1970-01-01
    • 2011-04-09
    • 2013-10-07
    • 1970-01-01
    • 2022-06-23
    • 2013-01-26
    相关资源
    最近更新 更多