Apache CXF - сторона сервера SSL 2Way - нет весны - PullRequest
0 голосов
/ 18 марта 2019

Я написал очень простое веб-приложение, работающее на Tomcat, в следующем примере:

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());

}

Спасибо Andrea

Ответы [ 2 ]

0 голосов
/ 18 марта 2019

Я нашел сам :) Необходимо реализовать метод сервлета 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"

0 голосов
/ 18 марта 2019

Взаимный SSL согласовывается, когда клиент подключается перед любым запросом.

Так что для Apache Tomcat вам необходимо изменить сервер .xml чтобы соединитель запрашивал сертификат клиента.Никакого пути назад.

Взаимный SSL не имеет ничего общего с Spring, вам это не нужно.

Просто примечание - существует протокол для «повторного применения» SSL-соединения (например, для запроса сертификата клиента для уже установленного соединения), но я не думаю, что вы можете сделать это в Tomcat

...