Liberty tls java.net.http.websocket не удастся после перехода на Java 21 & JakartaJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Liberty tls java.net.http.websocket не удастся после перехода на Java 21 & Jakarta

Сообщение Anonymous »

У нас есть код java.net.http.websocket , который подключается к нашим устройствам с протоколом веб -сокетов WSS: // TLS -протокола Web Socket успешно под нашим открытым java 17, Java EE (и Spring 5), но терпит неудачу под Java 21, Jakarta EE (и Spring 6).

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

server.xml
имеет конфигурацию SSL по умолчанию, которая указывает на трастовый магазин, в котором используется пользовательский сертификат подписавшегося, которые используют эти устройства. В конфигурации SSL также отключена проверка имени хоста TLS, потому что некоторые внутренние сертификаты, которые, как видят в этом приложении, кажутся неуместными в отношении того, какое имя они присутствуют, несмотря на все наши наилучшие усилия по решению этого.

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



< /code>
Функции Liberty вышли из: < /pbr /> 

concurrent-1.0
webProfile-8.0
javaMail-1.6
mpHealth-4.0

< /code>
to: < /p>

concurrent-3.0
webProfile-10.0
mail-2.1
mpHealth-4.0

< /code>
Те же версии OpenLiberty (последние, в настоящее время 25.0.0.9). < /p>
Тот же код WebSock, который работает под старой версией приложения: < /p>
webSocket = HttpClient.newHttpClient().newWebSocketBuilder()
.connectTimeout(Duration.ofSeconds(5))
.buildAsync(URI.create(endpoint), this)
.get();
< /code>
Результаты ошибки цепочки сертификатов в рамках новой версии: < /p>

21: 15: 01,510 ошибка com.ibm.gs.houston.payment.pos.ingenico.usi.usiposprovider: startpayment [default rexor-justor-hreadthrehdh OrderNumber = 2025092504, DeviceId = 9995: java.util.concurrent.executionException: javax.net.ssl.sslhandshakeexception: Pkix Path Build javax.net.ssl.sslhandshakeexception: Pkix Path Building Fake: sun.security.provider.certpath.suncertpathbuilderexception: Невозможно найти действительный путь сертификации для запрошенной цели

нет более дополнительной информации с JVM или Liberty SSL DeSug/PRACE. Похоже, Java.net.http.websocket 
больше не использует конфигурацию SSL по умолчанию в рамках Liberty. Когда я изменяю код Java, чтобы явно ссылаться на Liberty "Defaultslconfiguration" SSLContext, я преодолею эту ошибку: < /p>

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

webSocket = HttpClient.newBuilder().sslContext(sslContext).build().newWebSocketBuilder()
.connectTimeout(Duration.ofSeconds(5))
.buildAsync(URI.create(endpoint), this)
.get();
где sslcontext был введен как

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

com.ibm.websphere.ssl.JSSEHelper.getInstance().getSSLContext("defaultSSLConfig", null, null);
< /code>
Но теперь я получаю ошибку < /p>
javax.net.ssl.SSLHandshakeException: No name matching  found
Несмотря на то, что вы можете видеть выше, имея указанный verifyhostname = "false" в этом элементе . Кроме того, если я переопределяю это поведение на уровне JVM с -Дждк.internal.httpclient.disablehostnameverification = true , подключение к веб -сокетам полностью работает. Что говорит мне о том, что даже когда я явно ссылаюсь на «defaultslconfig», не используются не все его настройки.
(у нас также есть действительный сертификат диких знаков, но это отдельная тема.) Есть ли лучше, рекомендуется для меня получить необходимое поведение, где я направил свободу в трастовый магазин, который содержит необходимые сертификаты для этого веб -общения?

Подробнее здесь: https://stackoverflow.com/questions/797 ... 21-jakarta
Ответить

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

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

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

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

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