Почему не работает аутентификация клиента RMI / SSL? - PullRequest
0 голосов
/ 15 июля 2011

Я сделал следующие вещи:

+ generate keystore.jks with keytool
+ exported keystore.cer file with keytool
+ imported keystore.cer file into truststore.jks
+ copied keystore.jks and keystore.cer to the client

Затем я вызываю мой сервер с

-Djavax.net.ssl.trustStore=truststore.jks -Djavax.net.ssl.trustStorePassword=*

, а мой клиент с

 -Djavax.net.ssl.keyStore=forclient.jks -Djavax.net.ssl.keyStorePassword=*

Сервер выставляет своиинтерфейс с вызовом super () UnicastRemoteObject

super(PORT,
          new SslRMIClientSocketFactory(),
          new SslRMIServerSocketFactory(null, null, true));

Реестр не использует SSL.Почему это не работает?Это сработает, если я добавлю аргументы виртуальной машины хранилища ключей в конфигурацию запуска сервера и аргументы виртуальной машины доверенного пользователя в клиенте.Но я действительно хочу знать, почему?

1 Ответ

5 голосов
/ 15 июля 2011

Пожалуйста, сначала поймите цель хранилища ключей и хранилища доверенных сертификатов. Посмотрите на POST . Это говорит

  • Хранилище ключей содержит закрытые ключи и сертификаты с соответствующими открытыми ключами.

  • Склад доверенных сертификатов содержит сертификаты других сторон, с которыми вы собираетесь общаться, или от центров сертификации, которым вы доверяете для идентификации других сторон.

Таким образом, клиент ДОЛЖЕН иметь доверенное хранилище, чтобы он доверял серверу, с которым он взаимодействует, использует открытый ключ сервера для шифрования данных. Сервер ДОЛЖЕН иметь хранилище ключей, в котором хранятся закрытые ключи, которые используются для расшифровки данных, зашифрованных соответствующим личным ключом клиентом.

Надеюсь, теперь вы поняли, почему ваше приложение работает, когда вы переключаете хранилище ключей и трасты в клиент-сервер.

...