【问题标题】:Apache CXF - 2Way SSL server side - No SpringApache CXF - 2Way SSL 服务器端 - 无弹簧
【发布时间】:2019-08-09 02:21:44
【问题描述】:

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

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

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

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

}

谢谢 安德烈亚

【问题讨论】:

    标签: java ssl tomcat cxf


    【解决方案1】:

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

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

    Mutual SSL 与 Spring 无关,您不需要它。

    请注意 - 存在“重新划分” SSL 连接的协议(例如,为已建立的连接请求客户端证书),但我认为您不能在 Tomcat 中做到这一点

    【讨论】:

      【解决方案2】:

      我自己找到的:) 需要实现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"

      【讨论】:

        猜你喜欢
        • 2013-10-02
        • 1970-01-01
        • 2017-01-08
        • 1970-01-01
        • 2018-01-07
        • 1970-01-01
        • 2015-01-22
        • 2020-05-16
        • 1970-01-01
        相关资源
        最近更新 更多