如何在HTTP请求中接收客户端证书?

时间:2016-07-28 15:00:11

标签: java rest ssl jersey client-certificates

我已经生成了自签名SSL证书并提供给客户端。每次客户端发送REST请求时,我都会在服务器上进行客户端证书身份验证。我需要在java代码中获取证书的数据。我怎么做?我用过泽西框架。

1 个答案:

答案 0 :(得分:3)

您可以使用@Context Annotation来提取HttpServletRequest。

@POST
@Path("/getHelloWorld")
@Consumes(MediaType.APPLICATION_JSON)
public String helloWorld(@Context HttpServletRequest httpRequest) {
    X509Certificate[] certs = (X509Certificate[]) httpRequest.getAttribute("javax.servlet.request.X509Certificate");
    if (null != certs && certs.length > 0) {
        return <<YOUR CODE HERE>>;
    }
    return <<YOUR CODE HERE>>;
} 

假设您已在Web服务器上启用了客户端身份验证。对于tomcat服务器

< Connector SSLEnabled="true" acceptCount="100" clientAuth="true"
disableUploadTimeout="true" enableLookups="false" maxThreads="25"
port="8443" keystoreFile="conf/keystore.jks" keystorePass="changeit"
truststoreFile="conf/truststore.ts" truststorePass="changeit"
protocol="org.apache.coyote.http11.Http11NioProtocol" scheme="https"
secure="true" sslProtocol="TLS" />