我按照这个例子编写了一个在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());
}
谢谢安德烈
当客户端在任何请求之前连接时,将协商相互SSL。
所以对于apache tomcat,你需要更改服务器。 xml使连接器请求客户端证书。没办法。
相互SSL与Spring无关,你不需要它。
只是一个注释 - 存在一个协议来“重新启动”SSL连接(例如,为已经建立的连接请求客户端证书),但我认为你不能在Tomcat中做到这一点
我自己发现:)有必要实现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”