2

作为 Java Web 应用程序的一部分,我希望通过浏览器证书实现客户端身份验证。我已经能够找到有关如何在客户端和服务器上生成和安装证书的信息。

在访问方面,我能找到的所有信息似乎都是关于配置对特定路径的访问,例如 www.mydomain.com/securearea 并让服务器处理访问。

但是,我想根据用户是否提供有效的客户端证书来实现自定义行为,而不是一揽子访问块。本质上,我希望能够创建一个像hasValidClientCertificate()这样的方法

不幸的是,我找不到任何关于如何以编程方式检查客户端是否在 Java 中具有有效证书的参考。我正在使用Tomcat。这不是我的强项,因此非常感谢任何提示或建议。

非常感谢您的时间

保罗

4

1 回答 1

1

您需要执行几个步骤

1)配置tomcat进行客户端证书认证(在server.xml中):

<Connector port="8443" 
protocol="HTTP/1.1" 
SSLEnabled="true"          
maxThreads="150" 
minSpareThreads="25" 
maxSpareThreads="75"
enableLookups="false" 
disableUploadTimeout="true"
acceptCount="100" 
keyAlias="tomcat"
debug="0" 
scheme="https" 
secure="true"
clientAuth="want" 
sslProtocol="TLS" 
keystoreFile="server.keystore" keystorePass="changeit" 
truststoreFile="trust.keystore" truststorePass="changeit"/>

http://tomcat.apache.org/tomcat-7.0-doc/config/http.html关于clientAuth属性的澄清:

如果您希望 SSL 堆栈请求客户端证书,则设置为需要,但如果没有提供,则不会失败。

请参阅 Tomcat 身份验证以更好地解释如何为 SSL 配置 Tomcat:http: //tomcat.apache.org/tomcat-7.0-doc/ssl-howto.html

2) 使用以下代码实现您的 hasValidClientCertificate():

X509Certificate[] crts = (X509Certificate[]) request.getAttribute("javax.servlet.request.X509Certificate");
if (crts!= null && crts.length > 0) {
    return true;        
}

3)如果需要访问用户证书请访问

X509Certificate userCert = crts [0];
于 2013-03-18T19:26:45.553 回答