是否可以从 jax-rs 获取 TLS 客户端身份验证证书信息



我在OSGi环境中。我使用 jax-rs 类进行 RESTServiceRegistration。我已经将下面的层配置为在 TLS 握手期间要求客户端认证身份验证。现在我想从我的服务访问它。

这是我尝试访问 X509 主题 CommonName 的伪代码。

接口(用于 REST Web 服务注册):

@GET
@WebMethod
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@Path("/tls")
public String soutTLSClientCertInfo(@Context SomeContext context);

这是实现:

@Override
public String soutTLSClientCertInfo(@Context SomeContext context) {
    return context.getAttribute("java.etwas....tsl.cn_name");
}

我找到了答案...HttpServletRequest 是自动注入的,如果你有这样的东西

private HttpServletRequest request;
@Context public void setHttpServletRequest( HttpServletRequest request ) {
    this.request = request;
}

稍后您可以像以下方式使用它:

@Override
public String getTlsInfo() {
    StringBuilder stringBuilder = new StringBuilder(  );
    X509Certificate[] certs = (X509Certificate[]) request.getAttribute("javax.servlet.request.X509Certificate");
    for (X509Certificate cert: certs) {
        stringBuilder.append(cert.getSubjectX500Principal().getName());
    }
    return stringBuilder;
}

你还应该小心javax.servlet版本...

最新更新