Моя задача - получать электронные письма с почтового сервера 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
) в ваш доверенный магазин