Я интегрируюсь с сервером SOAP, который использует двусторонний SSL (взаимные TLS). < /p>
Для проверки моих сертификатов в порядке, я делаю запрос, используя почтальон и curl. < /p>
via postman: < /strong>
Я включаю сертификат SSL. хост. < /p>
Запрос успешно работает в почтальоне. Если я удалю сертификат клиента, сервер возвращает HTTP 403, поэтому я знаю, что требуется сертификат клиента и используется. Срок сработал. После этого я могу завершить рукопожатие, но я получаю HTTP 403 от сервера, но все в порядке, так как я не добавил сертификат клиента PFX. /> Включение журналов SSL и рукопожатия в Java, я могу видеть только отправляемый сертификат CA - нет никаких доказательств того, что сертификат клиента представлен. Конечно, он загружается и регистрируется в начале, но я не вижу его в рукопожатии. < /P>
Кажется, что мое приложение Java не использует это. Почтальон): < /p>
String url = "https://.....";
// Corpo da requisiç ão (como String)
String body = "...";
Map headers = Map.of(
"Content-Type", "application/soap+xml; charset=utf-8"
);
KeyStore clientStore = KeyStore.getInstance("PKCS12");
InputStream keyStoreStream = new FileInputStream("client.pfx");
clientStore.load(keyStoreStream, "A123456789".toCharArray());
KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
kmf.init(clientStore, "mypassword".toCharArray());
KeyStore trustStore = KeyStore.getInstance("JKS");
trustStore.load(new FileInputStream("ca_intermediate.jks"), "mypassword".toCharArray());
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(trustStore);
SSLContext sslContext = SSLContext.getInstance("TLS");
//sslContext.init(kmf.getKeyManagers(), null, new SecureRandom());
sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), new SecureRandom());
SSLConnectionSocketFactory socketFactory =
new SSLConnectionSocketFactory(sslContext, new DefaultHostnameVerifier());
Registry socketFactoryRegistry = RegistryBuilder.create()
.register("https", socketFactory)
.build();
PoolingHttpClientConnectionManager connectionManager =
new PoolingHttpClientConnectionManager(socketFactoryRegistry);
CloseableHttpClient httpClient = HttpClients.custom()
.setSSLSocketFactory(socketFactory)
.setConnectionManager(connectionManager)
.build();
HttpPost post = new HttpPost(url);
post.setEntity(new StringEntity(body));
headers.forEach(post::addHeader);
HttpResponse response =httpClient.execute(post);
System.out.println(response.getStatusLine().getStatusCode());
Подробнее здесь: https://stackoverflow.com/questions/796 ... s-in-postm
Java двусторонний SSL с сертификатом клиента приводит к HTTP 403, но работает в почтальстве ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение