Невозможно получить сертификат в HttpServletRequest - httpServletRequest.getAttribute ("javax.servlet.request.X509Certificate") дает ноль - PullRequest
0 голосов
/ 22 января 2019

Я написал службу поддержки весенней загрузки с поддержкой SSL. Я хочу извлечь открытый ключ сертификата клиента из http-запроса при вызове сервиса.

Я пытаюсь с httpServletRequest.getAttribute("javax.servlet.request.X509Certificate"); который дает ноль.

Если я попытаюсь httpServletRequest.getAttribute("javax.servlet.request.ssl_session_mgr"); Это дает мне SSLSession внутри JSSESupport objcet, который содержит локальный сертификат, но он является закрытым, и я не могу извлечь сертификат.

Ниже представлена ​​моя конфигурация SSL (application.properties):

server.port=8443
server.ssl.key-alias=selfsigned_localhost_sslserver
server.ssl.key-password=changeit
server.ssl.key-store=classpath:ssl-server.jks
server.ssl.key-store-provider=SUN
server.ssl.key-store-type=JKS

Ниже приведен код клиента, который я написал для отправки сертификата в мою заявку:

    public void testSeervice(){
    char[] passphrase = "changeit".toCharArray(); //password
            KeyStore keystore = KeyStore.getInstance("JKS");
            //KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
            keystore.load(new FileInputStream("D:\\Projects\\certvalidator\\src\\main\\resources\\ssl-server.jks"), passphrase); //path

            //TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509"); //instance
            TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
            tmf.init(keystore);


            SSLContext context = SSLContext.getInstance("TLS");
            TrustManager[] trustManagers = tmf.getTrustManagers();
            context.init(null, trustManagers, null);
            SSLSocketFactory sf = context.getSocketFactory();
            URL url = new URL("https://localhost:8443/validate");

            HttpsURLConnection httpsCon = (HttpsURLConnection) url.openConnection();
            httpsCon.setSSLSocketFactory(sf);
            httpsCon.setRequestMethod("GET");

            System.out.println("Response Message is " + httpsCon.getResponseMessage());

}
...