Существует ли какой-либо метод для прямой загрузки сертификата и закрытого ключа в SSLServerSocket (Java) программно?
Я из фона "с". Я пытаюсь проанализировать, как написать Java SSL сервер.
Итак, далеко примеры, которые я нашел, говорят о загрузке сертификата и private в хранилище ключей и программном связывании хранилища ключей с SSLContext, а затем создают SSLServerSocket из того же самого.
Но существуют ли какие-либо методы для прямого указания, какой сертификат должен использоваться SSLServerSocket? Кроме того, даже если я использую хранилище ключей и если есть несколько сертификатов и ключей, как могу ли я указать SSLServerSocket, который он должен использовать?
Любой пример ссылки будет полезен.
1 ответ:
Как я уже говорил в комментарии, в ответе на один из ваших вопросов ранее, вам нужно будет использовать
KeyManager
, чтобы сделать это.Существуют различные способы сделать это. jSSLutils - это библиотека, которая может сделать его немного более удобным (но вы также можете сделать это более вручную). Вот пример с FixedServerAliasKeyManager . Один из самых коротких способов сделать это-использовать что-то вроде этого:
X509SSLContextFactory sslContextFactory = new X509SSLContextFactory(); // By default, this would use the keystore passed with the usual system properties. sslContextFactory.setKeyManagerWrapper( new FixedServerAliasKeyManager.Wrapper("the-alias-you-want")); // You could read the alias name from a custom system property, for example. SSLContext sslContext = sslContextFactory.buildSSLContext("TLS"); SSLServerSocketFactory sslServerSocketFactory = sslContext.getServerSocketFactory();