Назад | Перейти на главную страницу

Как сертифицировать самоподписанный почтовый сервер imap

Моя задача - получать электронные письма с почтового сервера imaps с использованием Java, поэтому мне как клиенту нужно аутентифицировать почтовый сервер с помощью соответствующего сертификата. Однако похоже, что этот почтовый сервер использует самозаверяющий сертификат, который по умолчанию не включен в хранилище доверенных сертификатов (?). Из того, что я нашел Вот, свойства системы javax.net.ssl.trustStore и javax.net.ssl.trustStorePassword нужно установить. Приведен пример:

System.setProperty("javax.net.ssl.trustStore","clientTrustStore.key");
System.setProperty("javax.net.ssl.trustStorePassword","qwerty");

Мой вопрос в том, как мне получить это clientTrustStore.key и соответствующий пароль? Могу ли я создать это сам, зная данные о почтовом сервере, или это должно быть предоставлено ИТ-отделом, обслуживающим этот почтовый сервер?

Пароль хранилища доверенных сертификатов не требуется для чтения хранилища доверенных сертификатов.

Вам нужно будет создать доверенный магазин, что обычно делается с помощью keytool утилита. Вам потребуется получить общедоступный сертификат с сервера IMAPS, что можно сделать несколькими способами. В openssl В пакете есть ряд инструментов, которые позволят вам сохранить сертификат. Многие почтовые утилиты, такие как Thunderbird, позволяют экспортировать сертификат. Вы должны иметь возможность получить сертификат, включив отладку ssl и подключившись с помощью простого класса. Получив этот сертификат, импортируйте его в новое хранилище ключей, используя keytool утилита.

Если вы находитесь в защищенной сети, вы можете просто установить -Dtrust_all_cert=true свойство и игнорируйте проблему с магазином доверенных сертификатов. Это делает вас уязвимым для атак «злоумышленник посередине». Однако это практический обходной путь для самозаверяющих сертификатов, если это одноразовое получение. Вы также можете сделать это в своем коде.

Есть связанные вопросы, которые укажут вам правильное направление:

https://stackoverflow.com/questions/2642777/trusting-all-certificates-using-httpclient-over-https https://stackoverflow.com/questions/1219208/is-it-possible-to-get-java-to-ignore-the-trust-store-and-just-accept-whatever

Вам необходимо получить сертификат общедоступного сервера (либо от администратора сервера, либо, например, с помощью openssl s_client -starttls imap -connect imap-server:143), а затем вы используете java keytool Утилита для создания собственного хранилища доверенных сертификатов, куда вы можете добавить этот сертификат и отправить это хранилище ключей с вашим кодом.

Если сертификат сервера подписан (внутренним) ЦС вместо самоподписанного сертификата сервера, вы добавляете сертификаты ЦС (например, с помощью openssl s_client -starttls imap -showcerts -connect imap-server:143) в ваш доверенный магазин