java - 7.0.100+ 中 Tomcat 中的客户端证书身份验证问题
问题描述
我们的项目中有客户的证书认证
但是,出于某种原因,在 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"
我想这是责备的承诺
在第 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 版及更高版本的非转义证书?
解决方案
不,您无法将 Tomcat 配置为允许 HTTP 标头值包含 0x0A。这些更改是针对CVE-2020-1935 进行的。
顺便说一句,我假设 Nginx 正在执行客户端身份验证并将经过验证的客户端证书传递给 Tomcat。
推荐阅读
- python - 如何修复 python tkinter StringVar 的这个错误?
- javascript - 无法单击表头标签中的输入字段
- r - 值之间的一串值的计数
- django - 没有使用 Django import export 导入除 id 字段之外的字段
- sql - 如何从事务块中获取选择结果?
- apache - 启动乘客时缺少模块错误
- typescript - 对象属性的类型安全映射
- django - 更新/合并数据,而不是用 Django Rest Framework 中的 PUT 方法替换它
- excel - 继承时 VBA 类型不匹配(错误 13),用户来自
- mongodb - 如何在整个集合中进行仅总和查询?