Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемы установки SSL соединения, Зависание на вызове .startHandshake() 
:(
    Опции темы
udjin_ks
Дата 11.7.2007, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 18.1.2007

Репутация: нет
Всего: нет



Пытаюсь установить SSL соединение. Сертификаты создал. 

Класc SSLConnection (где-то с нета стащил)

Код

public class SSLConnection {

    private SSLContext ctx ;
    private KeyStore mykey , mytrust ;
    private String key, trust ;

    public SSLConnection(String key , String trust , char[] storepass, char[] keypass) {
        this.key = key;
        this.trust = trust ;
        initSSLContext(storepass , keypass );
    }

    public void initKeyStores(String key , String trust , char[] storepass){
        try {
            mykey = KeyStore.getInstance("JKS" , "SUN");
            mytrust = KeyStore.getInstance("JKS", "SUN");

            mykey.load(new FileInputStream(key)  ,storepass);
            mytrust.load(new FileInputStream(trust) ,storepass );
        }
        catch(Exception e) {
            System.err.println(e.getMessage());
        }
    }

    public void initSSLContext(char[] storepass , char[] keypass) {
        try {
            ctx = SSLContext.getInstance("TLSv1" , "SunJSSE");
            initKeyStores(key , trust , storepass) ;
            TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509", "SunJSSE");
            tmf.init(mytrust);
            KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509","SunJSSE");
            kmf.init(mykey , keypass);
            ctx.init(kmf.getKeyManagers() , tmf.getTrustManagers() ,null) ;
        }
        catch(Exception e) {
            System.err.println(e.getMessage());
        }
    }

    public SSLContext getMySSLContext() {
        return ctx ;
    }
}



Реализация сервера:

Код

                    String key = "*******/.keystore";
                    String trust = "*******/trust";
                    char[] storepass = "*****".toCharArray();
                    char[] keypass = "******".toCharArray();
                    SSLConnection sslConnection = new SSLConnection(key, trust, storepass, keypass);

                    SSLServerSocketFactory ssf =
                    (sslConnection.getMySSLContext()).getServerSocketFactory();

                    providerSocket = ssf.createServerSocket(port);
                    ((SSLServerSocket)providerSocket).setNeedClientAuth(true);

                    SSLSocket socket = (SSLSocket)providerSocket.accept();



Реализация клиентской части:

Код

            String key = "********/.keystore";
            String trust = "*********/trust";
            char[] storepass = "***".toCharArray();
            char[] keypass = "***".toCharArray();
            SSLConnection sslConnection = new SSLConnection(key, trust, storepass, keypass);
          
            SSLSocketFactory sf = sslConnection.getMySSLContext().getSocketFactory();
            connection = (SSLSocket)sf.createSocket(address , port);
            connection.startHandshake(); 



На строчке  connection.startHandshake();  идет жуткое зависание минут на 3-5. После чего конект таки устанавливается и можно работать. Что я делаю не так? Может необходимо какие-то параметры дополнительно в сокете установить или еще что? у меня впечаление что какой-то timeout отсиживается (неболее чем личное мнение).

 smile

Добавлено через 10 минут и 21 секунду
А иногда в процедуре получаю такое исключение

Код

javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:742)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1030)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1057)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1041)
    at com.archon.callcenter.common.socketSupport.SocketClient.SocketClient.createConnection(SocketClient.java:69)
    at com.archon.callcenter.client.proxy.RemoteProxy.initSockeClient(RemoteProxy.java:251)
    at com.archon.callcenter.client.workspace.WorkspaceFrame$UserLoginEventListener.loginOccurred(WorkspaceFrame.java:1338)
    at com.archon.callcenter.client.workspace.WorkspaceFrame.fireUserLoginEvent(WorkspaceFrame.java:1308)
    at com.archon.callcenter.client.proxy.LoginState.checkAuth(LoginState.java:102)
    at com.archon.callcenter.client.proxy.RemoteProxy.checkAuth(RemoteProxy.java:221)
    at com.archon.callcenter.client.frames.users.LoginFrame$ButtonLoginListener.actionPerformed(LoginFrame.java:88)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:234)
    at java.awt.Component.processMouseEvent(Component.java:5488)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3126)
    at java.awt.Component.processEvent(Component.java:5253)
    at java.awt.Container.processEvent(Container.java:1966)
    at java.awt.Component.dispatchEventImpl(Component.java:3955)
    at java.awt.Container.dispatchEventImpl(Container.java:2024)
    at java.awt.Component.dispatchEvent(Component.java:3803)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
    at java.awt.Container.dispatchEventImpl(Container.java:2010)
    at java.awt.Window.dispatchEventImpl(Window.java:1774)
    at java.awt.Component.dispatchEvent(Component.java:3803)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
    at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
Caused by: java.io.EOFException: SSL peer shut down incorrectly
    at com.sun.net.ssl.internal.ssl.InputRecord.read(InputRecord.java:333)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:723)
    ... 34 more


PM MAIL   Вверх
udjin_ks
Дата 11.7.2007, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 18.1.2007

Репутация: нет
Всего: нет



Проблема разрешилась добавлением в код сервера connection.startHandshake(); после строчки SSLSocket socket = (SSLSocket)providerSocket.accept();

Но теперь есть другая проблема. С одного SSLSocket сообщение уходит но с другой стороны в input ничего нету...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Работа с сетью | Следующая тема »


 




[ Время генерации скрипта: 0.0680 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.