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

标签 ssl openssl x509certificate apache-tomee

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

我正在运行最新版本的 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/

相关文章:

node.js - 从 Node.js 访问 OpenSSL 的不同方法

openssl - 使用 openssl verify 验证证书链

java - 对于非证书输入,CertificateFactory 返回 null

c# - 机器身份验证方案 C#

ssl - 证书 x509 扩展

IOS MDM 许可证和 SSl 证书(测试)

PHP mail() 不起作用,因为我有一个使用 SSL 电子邮件的服务器

java - OpenSSL 始终无法验证 Java 中 Bouncy CaSTLe 生成的签名

web-services - 当您使用带有客户端证书的相互 SSL 时,是否有任何理由签署消息体

c# - 限制密码套件的编程方式