Хранилище ключей обмена сертификатами SSL и хранилище доверенных сертификатов - PullRequest
0 голосов
/ 16 июня 2020

У меня есть обычный вариант использования, когда мне нужно аутентифицировать обычного клиента на моем java smtp-сервере, чтобы клиент отправлял почту на мой smtp-сервер. Теперь я хочу включить STARTTLS в этой среде. Я знаю, что об этом написано много, и я все читаю, но все равно что-то мне не нравится. Вот моя проблема:

(И, пожалуйста, поправьте меня, если какая-либо информация ниже неверна)

Для успешного установления связи SSL нам нужны хранилища ключей и доверенные хранилища.

В основном хранилище ключей -> где у нас есть publi c и закрытый ключ и сертификат (в основном способ идентификации)

Truststore -> в основном другое хранилище ключей, но здесь мы храним опубликованные c ключи, известные как сертификаты доверенных лиц.

Теперь, для успешной аутентификации клиента на сервере, я хочу использовать свой самозаверяющий сертификат на сервере. Для этого нам нужно:

Сервер -> должен иметь хранилище ключей (private + publi c key) + truststore (содержащее publi c ключ клиента)

Клиент -> хранилище ключей (содержащее закрытый + publi c ключ клиента) + хранилище доверенных сертификатов (сертификат сервера)

Здесь я запутался, есть ли клиенту также нужно хранилище ключей? или достаточно, чтобы у клиента был только сертификат publi c сервера.

Если все вышеперечисленное до сих пор верно, это проблема, с которой я столкнулся:

У меня есть два отдельных проекта eclipse java. Первый - это сервер со встроенной библиотекой smtp. и второй проект java имеет некоторый почтовый код java для отправки почты на этот smtp-сервер.

Я создал сертификат с помощью keytool. Но вот в чем дело. На стороне сервера я использую это:

private void setSystemPropertiesForSSLConnection() {
    System.setProperty("org.slf4j.simpleLogger.defaultLogLevel", "debug");
    System.setProperty("javax.net.ssl.keyStore", "C:/store/keystore.jks");
    System.setProperty("javax.net.ssl.keyStorePassword", "mypassword");
}

Как видите, я не указываю какое-либо хранилище доверенных сертификатов, хотя выше мы говорим, что мне нужен сертификат publi c клиента, которому можно доверять.

Кроме того, на стороне клиента у меня есть следующий фрагмент кода в части java почты:

Properties props = new Properties();
    props.put("mail.smtp.auth", "true");
    props.put("mail.debug", "true");
    props.put("mail.smtp.starttls.enable", "true");
    props.put("mail.smtp.host", host);
    props.put("mail.smtp.port", "25000");

Теперь, если это так, как вы можете видеть на моей стороне клиента У меня нет спецификации хранилища ключей или доверенного хранилища, но если я запустил код, письмо будет успешно отправлено с использованием javamail. Но что случилось с хранилищем доверенных сертификатов и хранилищами ключей? ПОЧЕМУ это работает, только когда у меня есть хранилище ключей на стороне сервера. Потому что я не добавил сертификат publi c. сервера или на стороне клиента, как клиент доверяет серверу?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...