Это не нужно использовать перед использованием SSLEngine.
. Вам это нужно в вашей реализации KeyManager
, в методе chooseServerAlias()
. Вам нужно будет найти доменное имя по одному из методов, перечисленных ниже, а затем создать свою реализацию X509KeyManager
, настроенную соответствующим образом, чтобы вернуть соответствующий псевдоним хранилища ключей, затем построить SSLContext,
, инициализировать его с помощью вашего KeyManager
, а затем построить свой SSLEngine.
Во время рукопожатия двигатель вызовет ваш менеджер ключей.
SNI. Если клиент поддерживает SNI, вы можете получить имя домена из исходного сообщения ClientHello
, как показано в вашей ссылке. Вам нужно будет восстановить ByteBuffer
в его предыдущее состояние после его синтаксического анализа, чтобы SSLEngine
мог также проанализировать его.
В противном случае вы полагаетесь на IP-адреса каждого домена, отличающегося друг от друга. Вы уже должны иметь SocketChannel,
, чтобы вы уже знали адрес назначения соединения, то есть адрес, который клиент использовал для подключения к вам, поэтому все, что вы можете сделать, это сопоставить имя домена с этим, если ваши домены имеют разные IP-адреса.
Вам не нужно это, прежде чем использовать 'SSLEngine,' вам это нужно в ваших 'KeyManager.getServerAliases()/selectServerAlias ()' методах. – EJP
@ EJP ok? поэтому какой метод я могу вызвать, когда получаю сообщение подтверждения? KeyManagerFactory.processClientHelloHandshake (byte [] data)? Я также не вижу никаких методов в KeyManager здесь ... https://docs.oracle.com/javase/7/docs/api/index.html?javax/net/ssl/KeyManager.html –
Он будет вам звонить, а не наоборот. Двигатель вызовет методы, о которых я упоминал. – EJP