Взаимное TLS-соединение от OpenLiberty с собственным хранилищем ключейJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Взаимное TLS-соединение от OpenLiberty с собственным хранилищем ключей

Сообщение Anonymous »

Я пытаюсь использовать настроенную конфигурацию исходящего SSL для конкретного хоста в OpenLiberty, чтобы установить https-соединение с удаленной системой (в данном случае Apple Pay, но я не думаю, что это актуально).
Я знаю, что хранилище ключей, пароль и протоколы верны, потому что, когда я делаю это полностью программно, как показано в https://stackoverflow.com/a/63080443/796761, соединение и запрос полностью работают. p>
Однако, когда я удаляю все настройки хранилища ключей/SSL и пытаюсь вернуться к тому, что я настроил в server.xml, я получаю ту же ошибку, что и при SSL вообще не настраиваю. (В данном случае это исключение java.io.IOException: анализатор заголовка HTTP/1.1 не получил байтов.)
Соответствующие элементы server.xml:
Соответствующие элементы server.xml:

Код: Выделить всё

    
webProfile-8.0 
...


...





Код Java:

Код: Выделить всё

        HttpRequest request = HttpRequest.newBuilder().uri(validationEndpoint)
.header("Content-Type", "application/json")
.POST(BodyPublishers.ofString(jsonRequest))
.build();
HttpClient client = HttpClient.newBuilder().build();

return client.send(request, BodyHandlers.ofString()).body();
Где для параметра validationEndpoint установлено значение https://apple-pay-gateway-cert.apple.co ... paySession
Опять же, если вместо этого я заменю указанный выше клиент следующим, запрос будет выполнен успешно:

Код: Выделить всё

        char[] passwordChars = keystorePassword.toCharArray();

KeyStore keyStore = KeyStore.getInstance("PKCS12");
keyStore.load(new FileInputStream("/keys/MerchID.AZMVDNOW.p12"), passwordChars);

KeyManagerFactory keyMgrFactory = KeyManagerFactory.getInstance("SunX509");
keyMgrFactory.init(keyStore, passwordChars);

SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
sslContext.init(keyMgrFactory.getKeyManagers(), null, null);

SSLParameters sslParam = new SSLParameters();
sslParam.setNeedClientAuth(true);

HttpClient client = HttpClient.newBuilder()
.sslContext(sslContext)
.sslParameters(sslParam).build();
OpenLiberty 24.0.0.6, JDK 17
Итак, вопрос в том, как я могу заставить Liberty использовать это конкретное хранилище ключей при подключении https к указанный сервер?
Я пока не нашел примера автоматического установления такого соединения с Liberty с использованием настроенной конфигурации SSL, поэтому надеюсь, что мне просто не хватает простого связующего звена.
Изменить:

Код: Выделить всё

javax.net.debug=ssl
не сообщает мне ничего полезного:

Код: Выделить всё

[err] javax.net.ssl|DEBUG|69|HttpClient-1-Worker-0|2024-07-12 20:30:31.041 UTC|SSLCipher.java:1870|KeyLimit read side: algorithm = AES/GCM/NOPADDING:KEYUPDATE
countdown value = 137438953472
[err] javax.net.ssl|DEBUG|69|HttpClient-1-Worker-0|2024-07-12 20:30:31.041 UTC|SSLCipher.java:2024|KeyLimit write side: algorithm = AES/GCM/NOPADDING:KEYUPDATE
countdown value = 137438953472
[err] javax.net.ssl|DEBUG|69|HttpClient-1-Worker-0|2024-07-12 20:30:31.051 UTC|SSLCipher.java:1870|KeyLimit read side: algorithm = AES/GCM/NOPADDING:KEYUPDATE
countdown value = 137438953472
[err] javax.net.ssl|ALL|69|HttpClient-1-Worker-0|2024-07-12 20:30:31.053 UTC|X509Authentication.java:223|No X.509 cert selected for [RSA, EC]

[err] javax.net.ssl|DEBUG|69|HttpClient-1-Worker-0|2024-07-12 20:30:31.053 UTC|SSLCipher.java:2024|KeyLimit write side: algorithm = AES/GCM/NOPADDING:KEYUPDATE
countdown value = 137438953472
[err] javax.net.ssl|DEBUG|91|Finalizer thread|2024-07-12 20:30:31.127 UTC|SSLSocketImpl.java:577|duplex close of SSLSocket

[err] javax.net.ssl|DEBUG|91|Finalizer thread|2024-07-12 20:30:31.129 UTC|SSLSocketImpl.java:1785|close the SSL connection (passive)
Редактирование 2:
При трассировке Liberty SSL похоже, что соответствующие объекты успешно загружены, включая эту запись, показывающую, что Liberty смогла увидеть сертификат в магазине:

[12.07.24, 20:49:04:920 UTC] 00000031 id=00000000 com.ibm.ws. ssl.config.WSKeyStore 3 псевдоним: сертификат личности продавца Apple Pay

И сопоставил имя хоста с конфигурацией:
< blockquote>
[12.07.24, 20:49:05:241 UTC] 00000031 id=00000000
com.ibm.ws.channel.ssl.internal.SSLChannelProvider 3
setSslConfig
id=applePaySSL
{com.ibm.ws.ssl.internal.RepertoireConfigService,
com.ibm.wsspi.ssl.SSLConfiguration}={verifyHostname=false,
service.scope=bundle,
comComponent.name=com.ibm.ws.ssl.internal.RepertoireConfigService,
TrustStore.target=(service.pid=com.ibm.ws.ssl.keystore_0),
trustDefaultCerts=false,
KeyStore.target=(service.pid=com.ibm.ws.ssl.keystore_0),
sslProtocol=TLSv1.2, config.source=file,
outboundConnection.0.host=apple-pay-gateway-cert.apple.com,
id=applePaySSL, service.pid=com.ibm.ws.ssl.repertoire_0,clientAuthenticationSupported=false, service.id=621,
keyStoreRef=com.ibm.ws.ssl.keystore_0, EnforceCipherOrder=false,
service.bundleid=132,
outboundConnection.0 .config.referenceType=com.ibm.ws.ssl.repertoire.config.outboundConnection,
osgi.ds.satisfying.condition.target=(osgi.condition.id=true),
config.overrides =true, clientAuthentication=true, компонент.id=487,
efficientTrustStore=com.ibm.ws.ssl.keystore_0,
config.id=com.ibm.ws.ssl.repertoire[applePaySSL], SecurityLevel=HIGH,
service.factoryPid=com.ibm.ws.ssl.repertoire, service.vendor=IBM,
config.displayId=ssl[applePaySSL]
< /blockquote>
Но я думаю, что исходящее соединение использовало SSLConfig по умолчанию вместо applePaySSL:

[12.07.24, 20:50:43:868 UTC] 00000046 id=00000000 com.ibm.ws.ssl.SSLPropertyUtils > lookupProperties alias=defaultSSLConfig Entry
[12.07.24, 20:50 :43:868 UTC] 00000046 id=00000000 com.ibm.ws.ssl.SSLPropertyUtils > getProperties sslAliasName=defaultSSLConfig
currentConnectionInfo={com.ibm.ssl.direction=outbound
< /blockquote>
Я не могу вставить сюда всю огромную трассировку, но при необходимости могу предоставить подробности.

Подробнее здесь: https://stackoverflow.com/questions/787 ... m-keystore
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Взаимное TLS-соединение от OpenLiberty с собственным хранилищем ключей
    Anonymous » » в форуме JAVA
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Взаимное TLS-соединение от OpenLiberty с собственным хранилищем ключей
    Anonymous » » в форуме JAVA
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Каковы различия между внутренним хранилищем, внешним хранилищем, SD -картой и съемным хранилищем?
    Anonymous » » в форуме Android
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Включите TLS 1.0, TLS 1.1, TLS 1.2... Asp.NET IIS 10.0.
    Anonymous » » в форуме C#
    0 Ответы
    112 Просмотры
    Последнее сообщение Anonymous
  • Где я могу запустить приложение Expo с собственным собственным кодом?
    Гость » » в форуме IOS
    0 Ответы
    41 Просмотры
    Последнее сообщение Гость

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