Ошибка хранилища ключей / доверенных сертификатов Java RMI SSL poss? - PullRequest
1 голос
/ 17 февраля 2010

Использование приведенного ниже кода для проверки SSL-соединения через RMI:

public class HelloImpl extends UnicastRemoteObject implements Hello {
    public HelloImpl() throws RemoteException {
        super(0, new SslRMIClientSocketFactory(), new SslRMIServerSocketFactory());
    }
    public String sayHello() {
        return "Hello World!";
    }
    public static void main(String args[]) throws Exception {
        // Get reference to the RMI registry running on port 3000 in the local host
        Registry registry = LocateRegistry.getRegistry(null, 3000);
        // Bind this object instance to the name "HelloServer"
        HelloImpl obj = new HelloImpl();
        registry.bind("HelloServer", obj);
        System.out.println("HelloServer bound in registry");
    }
}

Остальное довольно общее (взяли часть кода отсюда: http://blogs.oracle.com/lmalventosa/entry/using_the_ssl_tls_based),, в основном пытаясь выполнить аутентификацию только на сервере, чтобы заставить работать SSL. Однако, получая эту ноющую ошибку:

     RMI RenewClean-[146.169.51.86:60013,javax.rmi.ssl.SslRMIClientSocketFactory@4a63d8], READ: TLSv1 Alert, length = 2
RMI RenewClean-[146.169.51.86:60013,javax.rmi.ssl.SslRMIClientSocketFactory@4a63d8], RECV TLSv1 ALERT:  fatal, bad_certificate
RMI RenewClean-[146.169.51.86:60013,javax.rmi.ssl.SslRMIClientSocketFactory@4a63d8], called closeSocket()
RMI RenewClean-[146.169.51.86:60013,javax.rmi.ssl.SslRMIClientSocketFactory@4a63d8], Exception while waiting for close javax.net.ssl.SSLHandshakeException: Received fatal alert: bad_certificate
RMI RenewClean-[146.169.51.86:60013,javax.rmi.ssl.SslRMIClientSocketFactory@4a63d8], handling exception: javax.net.ssl.SSLHandshakeException: Received fatal alert: bad_certificate

из дампа отладки следует, что они пытаются выполнить рукопожатие, вплоть до замены симметричных ключей, но терпят неудачу при этом по какой-то необъяснимой причине. Во время компиляции мы указываем хранилище доверенных сертификатов, которое хранится в папке:

# $ java -Djavax.net.ssl.trustStore=truststore -Djavax.net.ssl.trustStorePassword=trustword HelloClient

Любая помощь высоко ценится!

Ответы [ 2 ]

0 голосов
/ 18 февраля 2010

РЕДАКТИРОВАНИЕ:

Bad_certificate означает, что сертификат сервера находится в формате, который клиент не может понять или хочет отклонить.

Не так много, что вы можетечто касается первого, за исключением получения нового сертификата сервера.

Однако, также кажется, что некоторые браузеры отправляют предупреждение bad_certficate, чтобы закрыть HTTPS-соединение, когда сертификат сервера, полученный во время SSL-рукопожатия, истек, самоподписанне проходит проверку имени хоста и т. д. Firefox использует это предупреждение для закрытия HTTPS-соединения, пока он показывает страницу пользователю, спрашивающему, доверять ли этому сертификату.Если пользователь соглашается, Firefox затем открывает новое HTTPS-соединение и на этот раз принимает сертификат вместо отправки предупреждения bad_certificate.

Предположительно, предупреждение отправляется, а не просто закрывается соединение, поэтому на сервере может быть записьчто на самом деле произошло, или, может быть, прервать соединение на этапе установления связи, а не подвергать себя риску отправки по нему данных.

0 голосов
/ 18 февраля 2010

Мне кажется, что есть проблема с обслуживанием сертификата сервером HelloImpl, что может означать проблему с тем, как вы запускаете сервер, или проблему с процессом генерации ключа / сертификата. Не могли бы вы запустить

keytool -list -v -keystore keystore

в хранилище ключей, с которого запускается ваш сервер HelloImpl, и, возможно, запустите сервер и клиент с -Djavax.net.debug = SSL, чтобы проверить, доступна ли какая-либо дополнительная информация? (если это так, редактируйте свой вопрос с этими подробностями) Из вышеприведенного трудно сказать, что это может быть за ошибка, не зная состояния хранилища ключей и доверенных сертификатов и процесса, который был ими выполнен.

...