Проверка сервера клиентом и наоборот при утсановлении https соединения vertx

Прошу знающих людей объяснить мне некоторые вещи, связаныне с ssl в фреймфорке Vertx.

Я хочу установить https соединение между клиентом и сервером, да ещё такое, чтобы не только сервер проверял открытый ключ клиента, но и чтобы клиент проверял сервер.

С первой часью я справился легко, добавив на сервер закрытый ключ, на клиент открытый в опицях, так же предварительно указав там, что соединение будет ssl. Vertx стал автоматически проверять публичый ключ клиента.

А вот со второй частью я уже не могу справиться т.к. добавив свой приватный ключ клиенту, а публичный отдав серверу, и так же настроив всё в опциях, клиент не првоеряет сервер. Пробовал подменять ключ на неверный у сервера, клиенту вообще пофиг.

Так же есть свойство в опицях, чтобы установить првоерку хоста. Если я ставлю эту опцию, то вообще соединение не устанавливается.

Скажите, пожалуйста, связана ли проверка хоста у клиента в vertx с проверкой публичного ключа с севрера и как вообще можно организовать данную проверку.

Опции сервера:


new HttpServerOptions()
    .setSsl(true)
    .setKeyStoreOption(
       new JksOptions()
            ...
    )
    .setTrustStoreOption(
       new JksOptions()
            ...
    )
    .setPort(port)
    .setHost(host); 

Опции клиента:

new HttpClientoptions()
    .setSsl(true)
    .setTrustStoreOption(
       new JksOptions()
            ...
    )
    .setKeyStoreOption(
       new JksOptions()
            ...
    )
    .setVerifyHost(true)
    .setkeepAlive(true);


Ответы (1 шт):

Автор решения: Vasily Mikhaylov

Похоже опции были заданы мной не совсем верно при настройке клиента и сервера.

Исправленные

Опции сервера:

new HttpServerOptions()
    .setSsl(true)
    .setKeyStoreOption(
       new JksOptions()
            ...
    )
    .setTrustStoreOption(
       new JksOptions()
            ...
    )
    .setClientAuth(ClientAuth.REQUIRED)
    .setPort(port)
    .setHost(host); 
    

Опции клиента:


new HttpClientoptions()
    .setSsl(true)
    .setTrustStoreOption(
       new JksOptions()
            ...
    )
    .setKeyStoreOption(
       new JksOptions()
            ...
    )
    .setVerifyHost(false)
    .setkeepAlive(true);

Добавил ещё один пункт .setClientAuth(ClientAuth.REQUIRED) и проверка работает.

Не до конца уверен, но по крайней мере при подмене ключей оно хотя бы ругается и не даёт установить соединение

→ Ссылка