ServletRequest.getAttribute(" javax.servlet.request.X509Certificate")返回null

时间:2014-07-01 15:04:59

标签: ssl openssl x509certificate tomee

我遇到一个让我疯狂的停船问题。我希望你们中的一位专家可以提供帮助。

我正在运行最新版本的TomEE +(1.6.0.2)和最新版本的Java 8(版本1.8.0_05-b13)。无论我尝试什么,我的HttpServlet中的以下代码行总是返回null。

X509Certificate certs[] = (X509Certificate[])request.getAttribute("javax.servlet.request.X509Certificate");

我最初假设我已经错误地指定了属性名称,因此为了诊断问题,我决定使用以下内容查看完整的属性列表:

Enumeration<String> enums = request.getAttributeNames();

然而,这表明我只有两个属性:一个用于密码套件,另一个用于密钥强度。

我阅读了其他文章并验证了我的连接器是否正确以及它是否正确设置了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表示服务器没有要求客户端证书。

为什么服务器不要求客户端证书?我做错了什么?

1 个答案:

答案 0 :(得分:0)

我有一个适用于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"
               />