Apache CXF - 2Way SSL服务器端 - 没有Spring

问题描述 投票:0回答:2

我按照这个例子编写了一个在Tomcat上运行的非常简单的Web应用程序:

https://www.javatips.net/blog/cxf-soap-without-spring?page=1

是否可以在服务器端配置2way SSL而无需更改Tomcat配置(server.xml)和不使用Spring?换句话说,是否可以更改此代码以检查客户端证书?

@Override
public void loadBus(ServletConfig servletConfig) {
 super.loadBus(servletConfig);
 Bus bus = getBus();
 BusFactory.setDefaultBus(bus);
 Endpoint.publish("/ChangeStudent", new ChangeStudentDetailsImpl());

}

谢谢安德烈

java ssl tomcat cxf
2个回答
0
投票

当客户端在任何请求之前连接时,将协商相互SSL。

所以对于apache tomcat,你需要更改服务器。 xml使连接器请求客户端证书。没办法。

相互SSL与Spring无关,你不需要它。

只是一个注释 - 存在一个协议来“重新启动”SSL连接(例如,为已经建立的连接请求客户端证书),但我认为你不能在Tomcat中做到这一点


0
投票

我自己发现:)有必要实现servlet的doPost方法,如下所示:

 protected X509Certificate verifyClientCertificate(HttpServletRequest req) {
        X509Certificate[] certs = (X509Certificate[]) req.getAttribute("javax.servlet.request.X509Certificate");
        if (null != certs && certs.length > 0) {
            return certs[0];
        }
        // ....
        throw new RuntimeException("No X.509 client certificate found in request");
    }


   @Override
   protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException {
    System.out.println("DO POST");
    verifyClientCertificate(request);
    super.doPost(request, response);

   }

并使用Tomcat server.xml配置clientAuth =“want”

© www.soinside.com 2019 - 2024. All rights reserved.