2016-09-09 9 views
1

Допустим, что я создал SSLContext, создал serverSocket с serverSocketFactory, и я начал принимать соединения.Могу ли я перезагрузить trustmanager после открытия serverocket в ssl-соединении

что-то вроде: SSLContext.getDefault().getServerSocketFactory().createServerSocket(1234).accept();

Предположим, он работает на некоторое время, и теперь я решил изменить свой TrustManager (добавлять/удалять новые сертификаты доверять). Можно ли это сделать без закрытия сокета и создания нового SSLContext?

ответ

0

Вы можете использовать следующий подход.

Во-первых, вы сохраняете ссылку на свой объект SSLContext, когда вы его создаете.

SSLContext sslContext=SSLContext.getDefault(); 
sslContext.getServerSocketFactory().createServerSocket(1234).accept(); 

Затем, когда вы хотите, чтобы загрузить новую TrustManager, вы можете вызвать метод init() снова с соответствующим TrustManager следующим образом.

TrustManager trustManagers[] = // load trust managers here. 
sslContext.init(null,trustManagers,null); 

В данном случае способ init() принимает 3 параметра, KeyManager[], TrustManager[] и SecureRandom. Если вы передадите для любого из них, то SSLContext будет загружен с помощью Менеджеров ключей по умолчанию и Trust Managers. Поскольку вы хотите загрузить только доверительные управляющие, вам нужно передать новый TrustManager[].

Поскольку вы не меняете ссылку на свой объект SSLContext, это не нарушит ваш поток или не повлияет на существующие SSLIOSession s.

 Смежные вопросы

  • Нет связанных вопросов^_^