Они отправили нам 4 файла и пароль для файла .P12: .csr, .cer,
.key, .P12
В идеале вы должны сгенерировать закрытый ключ (в .key
) и CSR (в .csr
) самостоятельно, а ЦС должен был вернуться с сертификатом (обычно в .cer
) на основе CSR, который вы бы собрались вместе, чтобы создать файл PKCS # 12 (.p12
).
На этом этапе вы можете отказаться от CSR. Файл PKCS # 12 теперь должен содержать закрытый ключ, связанный с ним сертификат и, возможно, присоединенную цепочку сертификатов. Вы можете извлечь файлы .key
и .cer
из этого файла .p12
позже. Полагаю, вам были переданы все эти файлы из-за того, как они были сгенерированы (с использованием промежуточных файлов), или для удобства, чтобы не приходилось конвертировать их самостоятельно.
Терминология Java не идеальна, но хранилище ключей и хранилище доверенных сертификатов - это две сущности типа хранилища ключей, но с другой целью. Разница между KeyManager и TrustManager (и, следовательно, между javax.net.ssl.keyStore и javax.net.ssl.trustStore) заключается в следующем (цитируется в справочном руководстве JSSE ):
TrustManager : определяет, следует ли доверять учетным данным удаленной аутентификации (и, следовательно, соединению).
KeyManager : Определяет, какие учетные данные аутентификации отправлять на удаленный хост.
Свойства javax.net.ssl.trustStore*
являются одним из способов настройки TrustManager
. Свойства javax.net.ssl.keyStore*
являются одним из способов настройки KeyManager
.
Как правило, в хранилище доверенных сертификатов не требуется материал закрытого ключа (если только вы не используете его в качестве хранилища ключей). Часто лучше использовать отдельное хранилище доверенных сертификатов, которое можно было бы свободно копировать по всей машине, не беспокоясь о утечке материалов закрытого ключа.
Что может иметь смысл, так это создать новое хранилище ключей (JKS), которое вы будете использовать в качестве хранилища доверенных сертификатов, используя сертификаты CA (не уверен, что вам их предоставили).
Вы не выполняете взаимную аутентификацию, устанавливая только хранилище доверенных сертификатов (для хранилища ключей нет значений по умолчанию, поэтому им необходимо явно указать эти параметры). Если вы хотите использовать свой клиентский сертификат для подключения к удаленной стороне, вам необходимо установить его в хранилище ключей (например, используя свойства javax.net.ssl.keyStore*
так же, как вы делали это для хранилища доверенных сертификатов).
Вы можете указать и хранилище ключей, и хранилище доверенных сертификатов на один и тот же файл .p12
. Побочным эффектом является то, что другим соединениям, установленным вашей службой в других местах (например, https://www.google.com
), нельзя доверять, поскольку он не будет содержать CA для них. Вот почему может быть лучше создать отдельное «хранилище ключей доверенного хранилища» (JKS может быть проще) для сертификатов CA. Вы можете сделать копию стандартного cacerts
(в каталоге JRE), импортировать в него сертификат своего ЦС и использовать его.