"Я создал загрузочный веб-сервис 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());
" Я ожидаю ответа от службы приветствия от службы "
" Я получаю подобное "