有没有办法从2路ssl连接中的java代码恢复客户端证书的通用名称?

gro*_*roo 1 java ssl soap weblogic

我们有一个weblogic服务器,配置为在与客户端建立与Web服务解决方案的ssl连接时需要客户端证书.ssl握手完美地工作,因为我们已经配置了所需的全部内容.

现在,在连接之后我们收到一个soap请求,其中客户端ID是此请求soap的字段之一.我们需要做的是检查此id与用于在我们的服务器内连接的客户端证书的通用名称,以保证交易.这对我们来说非常重要,因为这是银行交易,涉及很多钱,我们需要避免欺诈.

那么:有没有办法恢复用于使用weblogic 10.3.3服务器在服务器上运行的java代码建立双向ssl连接的客户端证书的通用名称?

[]中

Vin*_*lds 6

可以使用HttpServletRequest.getAttribute(String)方法调用从传入的Servlet请求中读取客户端的证书.javax.servlet.request.X509Certificate当servlet容器创建Request对象的实例以供servlet/webservice处理时,该属性由servlet容器填充.

然后可以从X500Principal对象获取证书的DN,该对象通过getX500Principal方法调用从证书对象获得.这不会给CN,但会以指定的格式提供完整的专有名称; 这可以解析为提供CN.

就访问ServletRequest对象而言,可以对JAX-WS Web服务进行编程以读取MessageContext,该MessageContext允许访问底层的HttpServletRequest对象.

  • +1,和`javax.servlet.request.X509Certificate`是一个`java.security.cert.X509Certificate`数组(如果需要,代表链).索引0是客户端证书的位置.此外,在解析CN时,您应该知道DN中可能有多个. (2认同)
  • 它工作:实现如下:(Jax-WS Web服务):@ Resource WebServiceContext wsCtx; MessageContext msgCtx = wsCtx.getMessageContext(); HttpServletRequest httpSR =(HttpServletRequest)msgCtx.get(MessageContext.SERVLET_REQUEST); String x500Prin =""; try {X509Certificate [] x509Cert =(X509Certificate [])httpSR.getAttribute("javax.servlet.request.X509Certificate"); x500Prin = x509Cert [0] .getSubjectX500Principal().getName(); } catch(例外e){log.severe("Erro ao instanciar certificado =======>"+ e.getMessage()); System.out.println("x500Prin:"+ x500Prin); (2认同)