Свойства javax.net.ssl.keyStore*
(хранилище ключей) предназначены для ключей и сертификатов стороны, использующей его. То есть на сервере он должен содержать сертификат сервера и его закрытый ключ; на клиенте он должен содержать клиентские сертификаты и их закрытые ключи.
Напротив, склад доверенных сертификатов (свойства javax.net.ssl.trustStore*
) содержит доверенные сертификаты, используемые для проверки сертификата удаленной стороны. На клиенте это то, что используется для определения того, доверяете ли вы сертификату сервера (обычно через цепочку к сертификату CA, которому доверяет клиент); на сервере это то, что используется для проверки сертификата клиента.
И хранилище доверенных сертификатов, и хранилище ключей являются файлами / объектами хранилища ключей (терминология на самом деле не помогает).
Если вы установите javax.net.ssl.keyStore*
на стороне клиента, он будет использоваться клиентом для представления своего сертификата (который может быть запрошен только сервером, и который вы, похоже, не используете в любом случае). Он по-прежнему будет использовать хранилище доверенных сертификатов по умолчанию (поставляется / настраивается с помощью JRE) и вряд ли будет содержать конкретный сертификат в cert_file.jck
(который, вероятно, является самозаверяющим сертификатом, созданным вами для сервера). Вместо этого установите свойства javax.net.ssl.trustStore*
, чтобы они указывали на этот файл.
(Если вы хотите, чтобы сертификаты CA по умолчанию также были доступны, я бы предложил скопировать сертификаты в хранилище доверенных сертификатов по умолчанию, обычно из $JAVA_HOME/lib/security/jssecacerts
или $JAVA_HOME/lib/security/cacerts
в ваше собственное хранилище доверенных сертификатов.)