Я хотел бы написать API-интерфейс клиента, который мог бы использовать этот сервис через https с самозаверяющим сертификатом. У меня есть самоподписанный сертификат myCertificate.cer и хранилище ключей, содержащее его.
Хранилище ключей сервера содержит самозаверяющий сертификат и закрытый ключ сервера и используется сервером для подписи сообщений и для возврата учетных данных клиенту.
На стороне клиента вам необходимо импортировать сертификат сервера в клиентское хранилище доверия (и, как правило, вам не нужен закрытый ключ в клиентском хранилище доверия, поэтому вы извлекаете один файл сертификата, т.е. без закрытого ключа, и затем вы импортируете этот сертификат сервера в хранилище доверенных сертификатов.)
Это работает, но я хотел бы использовать myCertificate.cer, а не хранилище ключей, содержащее его.
Это не хранилище ключей, а хранилище доверенных сертификатов, и требуется добавление сертификата в доверенное хранилище клиентов, поскольку самозаверяющие сертификаты не подписаны корневым ЦС и не являются доверенными по умолчанию. Так что вам нужно создать цепочку доверия.
Теперь вы можете распространять хранилище доверенных сертификатов в JAR клиентского API. Этот подход обсуждается в этой теме (самая большая проблема заключается в том, что вам придется перераспределять JAR, когда истекает срок действия сертификата сервера). Лично мне не очень нравится это решение.
ИМХО, хорошим решением, если вы хотите пропустить вещи из хранилища доверия, было бы купить реальный сертификат у широко известного поставщика сертификатов, для которого у вас уже есть сертификаты корневого CA в хранилище доверия (например, Verisign, Thawte).