7.0.100+ Tomcat 中的客户端证书身份验证问题
Client's certificate authentication issue in Tomcat in 7.0.100+
我们项目中有客户的证书认证
但是,由于某种原因,在 100 Tomcat 发布后似乎没有任何效果
当我们通过 nginx
[=22= 代理应用程序时,我们得到 400 HTTP
响应或证书 header 为空(如果我们设置 rejectIllegalHeader="false"
) ]
示例(header的值),名称 - ssl_client_cert
:
"-----BEGIN CERTIFICATE-----\x0A\x09MIIFXDCCA0SgAwIBAgIBBDANBgkqhkiG9w0BAQsFADBHMQ...
\x0A\x09-----END CERTIFICATE-----"
或ssl_client_raw_cert
"-----BEGIN CERTIFICATE-----\x0AMIIFXDCCA0SgAwIBAgIBBDANBgkqhkiG9w0BAQsFADBHMQsw ...
y2EmDsw=\x0A-----END CERTIFICATE-----\x0A"
我猜这是罪魁祸首
在第 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 版及更高版本的 non-escaped 证书?
不,您无法配置 Tomcat 以允许包含 0x0A 的 HTTP header 值。这些更改是为了响应 CVE-2020-1935.
顺便说一句,我假设 Nginx 正在执行客户端身份验证并将经过验证的客户端证书传递给 Tomcat。
我们项目中有客户的证书认证
但是,由于某种原因,在 100 Tomcat 发布后似乎没有任何效果
当我们通过 nginx
[=22= 代理应用程序时,我们得到 400 HTTP
响应或证书 header 为空(如果我们设置 rejectIllegalHeader="false"
) ]
示例(header的值),名称 - ssl_client_cert
:
"-----BEGIN CERTIFICATE-----\x0A\x09MIIFXDCCA0SgAwIBAgIBBDANBgkqhkiG9w0BAQsFADBHMQ...
\x0A\x09-----END CERTIFICATE-----"
或ssl_client_raw_cert
"-----BEGIN CERTIFICATE-----\x0AMIIFXDCCA0SgAwIBAgIBBDANBgkqhkiG9w0BAQsFADBHMQsw ...
y2EmDsw=\x0A-----END CERTIFICATE-----\x0A"
我猜这是罪魁祸首
在第 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 版及更高版本的 non-escaped 证书?
不,您无法配置 Tomcat 以允许包含 0x0A 的 HTTP header 值。这些更改是为了响应 CVE-2020-1935.
顺便说一句,我假设 Nginx 正在执行客户端身份验证并将经过验证的客户端证书传递给 Tomcat。