Невозможно использовать веб-сервис с двухсторонней аутентификацией - PullRequest
0 голосов
/ 01 ноября 2019

"Я создал загрузочный веб-сервис Spring, используя двухстороннюю аутентификацию ssl с закрытыми ключами клиент / сервер"

", пока я использую webserivce, работает нормально, передавая client.crt private.key в curl. «

», когда я использую веб-сервис в httpclient, он показывает ошибку пути проверки PKIX. «

» с использованием openssl и java keytool я сгенерировал сертификаты сервера и клиентские сертификаты. После этого я создал client.crtфайл для авторизации пользователя. "

        String privateKey="C:\\ssl\\clientprivate.key";
    String crtFile= "C:\\ssl\\client.crt";


        URL url =new URL("https://localhost:8443/helloworld");

         CertificateFactory cf = CertificateFactory.getInstance("X.509");

    SSLContext sslContext = null;

        java.security.cert.Certificate ca;
        try(InputStream is = new BufferedInputStream(new FileInputStream(crtFile));
            InputStream privatefile = new BufferedInputStream(new FileInputStream(privateKey));
                ) {

            ca=cf.generateCertificate(is);
            System.out.println("ca=" + ((X509Certificate) ca).getSubjectDN());

            String keyStoreType = KeyStore.getDefaultType();
            KeyStore keyStore = KeyStore.getInstance(keyStoreType);
            keyStore.load(null,null); 
            keyStore.setCertificateEntry("ca", ca);


            String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
            TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
            tmf.init(keyStore);

            KeyManagerFactory kmf 
 =KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());

             KeyStore ks = KeyStore.getInstance(keyStoreType);
             ks.load(new FileInputStream(pkc12), 
                     "Change".toCharArray() );

                kmf.init( ks, "Change".toCharArray() );

            sslContext = SSLContext.getInstance("TLS");
            sslContext.init(kmf.getKeyManagers(), 
                        tmf.getTrustManagers(), null);


        } catch (Exception e) {
            e.printStackTrace();
        }

        HostnameVerifier verifier= new HostnameVerifier() {

            @Override
            public boolean verify(String hostname, SSLSession 
                   arg1){
            return true;
            }
        };

        HttpsURLConnection con=(HttpsURLConnection) 
 url.openConnection();
        con.setSSLSocketFactory(sslContext.getSocketFactory());
        con.setHostnameVerifier(verifier);
        con.setRequestMethod("GET");


        System.out.println(con.getResponseCode());

" Я ожидаю ответа от службы приветствия от службы "

" Я получаю подобное "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...