Java двусторонний SSL с сертификатом клиента приводит к HTTP 403, но работает в почтальствеJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Java двусторонний SSL с сертификатом клиента приводит к HTTP 403, но работает в почтальстве

Сообщение Anonymous »

Я интегрируюсь с сервером 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»