我遇到了一个让我发疯的停船问题。我希望你们中的一位专家可以提供帮助。
我正在运行最新版本的 TomEE+ (1.6.0.2) 和最新版本的 Java 8 (build 1.8.0_05-b13)。无论我尝试什么,我的 HttpServlet 中的以下代码行总是返回 null。
X509Certificate certs[] = (X509Certificate[])request.getAttribute("javax.servlet.request.X509Certificate");
我最初假设我指定的属性名称不正确,因此为了诊断问题,我决定使用以下方法查看完整的属性列表:
Enumeration<String> enums = request.getAttributeNames();
然而,这只向我展示了两个属性:一个用于密码套件,另一个用于 key 强度。
我阅读了其他文章并验证了我的连接器是正确的并且它的 clientAuth 属性设置正确。这是连接器:
<Connector port="4449" protocol="org.apache.coyote.http11.Http11AprProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="true" sslProtocol="TLSv1.2"
SSLCertificateFile="/etc/unipagos/certs/pay.crt"
SSLCertificateKeyFile="/etc/unipagos/certs/pay.key"
SSLVerifyClient="required"
SSLHonorCipherOrder="true"
ciphers="TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384"/>
连接似乎有效,但是使用 openssl s_client
和 -msg
表明服务器没有要求客户端证书。
为什么服务器不要求客户端证书?我做错了什么?
最佳答案
我有一个用于 tomee 的工作连接器配置,服务器正在请求客户端证书。 你可以试试
<Connector port="7443" protocol="org.apache.coyote.http11.Http11AprProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
SSLProtocol="TLSv1.2"
SSLVerifyClient="require"
SSLCertificateFile="/opt/_cdrom_apache/certs/ec-dev-apr.pem"
SSLCertificateKeyFile="/opt/_cdrom_apache/certs/ec-dev.key"
SSLCACertificateFile="/opt/_cdrom_apache/certs/CA.pem"
/>
关于ssl - ServletRequest.getAttribute ("javax.servlet.request.X509Certificate") 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24513566/