KeyStore и TrustStore – это хранилища
криптографических публичных и приватных ключей и сертификатов. Обычно они представляются файлами формата
.jks,
.dks,
.p12, и другими, в зависимости от
типа хранилища.
Для манипуляций над файлами хранилищ в JDK поставляется специальная утилита –
keytool. Отдельные ключи разных типов добавляются в хранилище под заданными именами (
alias). Еще этот файл называют
базой данных сертификатов. Этот файл обычно защищен паролем.
KeyStore и TrustStore устроены похоже, но служат разным целям. KeyStore хранит данные
о нашем приложении, тогда как TrustStore – о других,
которым мы доверяем.
По умолчанию не подключается никакой KeyStore. Подключить его можно параметрами
javax.net.ssl.keyStore (расположение файла),
javax.net.ssl.keyStoreType (тип) и
javax.net.ssl.keyStorePassword (пароль). Добавочные можно загружать динамически, классом
java.security.KeyStore.
По умолчанию в приложении подключен один TrustStore, файл
jre/lib/security/cacerts. Переопределить его можно параметрами JVM
javax.net.ssl.trustStore,
javax.net.ssl.trustStorePassword и
javax.net.ssl.trustStorePassword.
Типичный пример использования – подключить TrustStore с самоподписанным
SSL сертификатом, чтобы приложение могло ходить на определенный сайт по протоколу HTTPS, не проваливая проверку безопасности. Либо же подключить KeyStore с подлинным SSL сертификатом, чтобы приложение само работало как HTTPS-сервер.