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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошбки при работе с SSL, провайдер JCE не зарегистрирован 
V
    Опции темы
progdog
  Дата 3.7.2007, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Помогите пожалуйста! 

Проблема состоит в том, что JSSE не может найти JCE. Я сделал свой код, но когда тот не заработал для верности скопировал код для работы с SSL с статьи этого сайта и он точно так же не работает. После того как произойдет handshaking постоянно выскакивает исключение, привожу последнюю часть с включенным интернет логом -Djavax.net.debug=all или как-то там, так вот:

Код

*** ServerHelloDone
[read] MD5 and SHA1 hashes:  len = 4
0000: 0E 00 00 00                                        ....
matching alias: sslsecretkey
*** Certificate chain
chain [0] = [
[
  Version: V1
  Subject: CN=Vasya Pupkin, OU=CIA, O=CIA, L=Tmutarakan, ST=Kukuevskiy Region, C=RU
  Signature Algorithm: MD5withRSA, OID = 1.2.840.113549.1.1.4

  Key:  Sun RSA public key, 1024 bits
  modulus: 99610213800826206034039542021082246569623563604961979771027354363501512127231350173296106147884413904007171077166072992475824339194478849365410906084286376644182748693348767959007534872379375743457737800528498627232203242074533242725983381773053810775452126195350741285099535086096354523854519198476336248369
  public exponent: 65537
  Validity: [From: Tue Jul 03 20:29:04 EEST 2007,
               To: Mon Oct 01 20:29:04 EEST 2007]
  Issuer: CN=Vasya Pupkin, OU=CIA, O=CIA, L=Tmutarakan, ST=Kukuevskiy Region, C=RU
  SerialNumber: [    468a8760]

]
  Algorithm: [MD5withRSA]
  Signature:
0000: 00 E8 DC 4D 14 DF 76 BD   24 64 CE 4B C8 2D 78 8D  ...M..v.$d.K.-x.
0010: 34 24 BC 13 81 21 AC 38   81 6F 75 F0 B3 AB 5E AF  4$...!.8.ou...^.
0020: 29 69 DF 00 ED E1 CC 2B   C5 DC 1D 42 2D F9 3E 1A  )i.....+...B-.>.
0030: 6F A4 16 69 B7 93 CE EE   50 A9 25 1A 53 55 C6 97  o..i....P.%.SU..
0040: D6 28 04 9E 17 77 FC B2   37 00 FD E2 1F 7D 21 3D  .(...w..7.....!=
0050: 04 92 C8 A1 F5 4C F2 4C   24 31 C3 18 8D EA FD 68  .....L.L$1.....h
0060: 97 9F 2B B9 0E 64 7E 60   E0 70 1D 9C FA 9C E6 8D  ..+..d.`.p......
0070: 34 34 A7 18 82 AF 5E D9   4C CF 4B 64 BA 22 B9 35  44....^.L.Kd.".5

]
***
main, handling exception: javax.net.ssl.SSLKeyException: RSA premaster secret error
main, SEND TLSv1 ALERT:  fatal, description = unexpected_message
main, WRITE: TLSv1 Alert, length = 2
[Raw write]: length = 7
0000: 15 03 01 00 02 02 0A                               .......
main, called closeSocket()
javax.net.ssl.SSLKeyException: RSA premaster secret error
    at com.sun.net.ssl.internal.ssl.PreMasterSecret.<init>(Unknown Source)
    at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverHelloDone(Unknown Source)
    at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(Unknown Source)
    at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Unknown Source)
    at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Unknown Source)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(Unknown Source)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(Unknown Source)
    at engine.net.NetworkEngine.<init>(NetworkEngine.java:54)
    at engine.net.NetworkEngine.main(NetworkEngine.java:192)
Caused by: java.security.NoSuchAlgorithmException: Cannot find any provider supporting RSA/ECB/PKCS1Padding
    at javax.crypto.Cipher.getInstance(DashoA12275)
    at com.sun.net.ssl.internal.ssl.JsseJce.getCipher(Unknown Source)
    at com.sun.net.ssl.internal.ssl.RSACipher.<init>(Unknown Source)
    at com.sun.net.ssl.internal.ssl.RSACipher.getInstance(Unknown Source)
    ... 10 more


Код серера и клиента.
Код

        String KSType="JKS", KSProvider="SUN", KSFileName="D:/mykey.ks", KSPassword="murzilka";

        try {
         System.out.println("=====Where did you get AES=====");
         Cipher c = Cipher.getInstance("AES/CBC/NoPadding");
         System.out.println(c.getProvider());
        } catch(Exception nspe) {
         nspe.printStackTrace();
        }
        
        try {
         KeyStore ks=KeyStore.getInstance(KSType,KSProvider);
         ks.load(new BufferedInputStream(new FileInputStream(KSFileName)), KSPassword.toCharArray());
         
          String KeyPassword="murzilka", KMFAlgorithm="SunX509", KMFProvider="SunJSSE", TMFAlgorithm="SunX509", TMFProvider="SunJSSE";

          KeyManagerFactory kmf=KeyManagerFactory.getInstance(KMFAlgorithm,KMFProvider);
          kmf.init(ks,KeyPassword.toCharArray());
          TrustManagerFactory tmf=TrustManagerFactory.getInstance(TMFAlgorithm,TMFProvider);
          tmf.init(ks);
          
//         параметры для создания контекста
          String SSLCProtocol="TLSv1", SSLCProvider="SunJSSE";

          SSLContext sslc=SSLContext.getInstance(SSLCProtocol,SSLCProvider);
          sslc.init(kmf.getKeyManagers(),tmf.getTrustManagers(),null);
          

          
          SSLServerSocketFactory ssf=sslc.getServerSocketFactory();
             SSLServerSocket ss=(SSLServerSocket)ssf.createServerSocket(4443);
             ss.setNeedClientAuth(true);//требуем аутентификацию подключающихся клиентов
             Logger.log("Listening...");
             SSLSocket sock = (SSLSocket)ss.accept();
             Logger.log("Handshaking");
             sock.startHandshake();
             Logger.log("OK :)");
             sock.close();
        } catch(Exception e) {
         e.printStackTrace();
        }

Клиент:
Код

         //параметры для загрузки хранилища ключей
        String KSType="JKS", KSProvider="SUN", KSFileName="D:/mykeycopy.ks", KSPassword="murzilka";

        try {
         KeyStore ks=KeyStore.getInstance(KSType,KSProvider);
         ks.load(new BufferedInputStream(new FileInputStream(KSFileName)), KSPassword.toCharArray());
         
          String KeyPassword="murzilka", KMFAlgorithm="SunX509", KMFProvider="SunJSSE", TMFAlgorithm="SunX509", TMFProvider="SunJSSE";

          KeyManagerFactory kmf=KeyManagerFactory.getInstance(KMFAlgorithm,KMFProvider);
          kmf.init(ks,KeyPassword.toCharArray());
          TrustManagerFactory tmf=TrustManagerFactory.getInstance(TMFAlgorithm,TMFProvider);
          tmf.init(ks);
          
//         параметры для создания контекста
          String SSLCProtocol="TLSv1", SSLCProvider="SunJSSE";

          SSLContext sslc=SSLContext.getInstance(SSLCProtocol,SSLCProvider);
          sslc.init(kmf.getKeyManagers(),tmf.getTrustManagers(),null);
          
          String host="localhost";
          int port=4443;
          
          SSLSocketFactory sf=sslc.getSocketFactory();
          SSLSocket s=(SSLSocket)sf.createSocket(host,port);
          s.setWantClientAuth(true);//клиент хочет пройти процедуру аутентификации
          
          Logger.log("Created");
          
          s.startHandshake();
          
          Logger.log("OK");
          s.close();
        } catch(Exception e) {
         e.printStackTrace();
        }

(Logger - класс протоколирования)

На java.sun написано в доке по JSSE:

Цитата

SunJSSE can not find a JCA/JCE provider which supports a required algorithm and causes NoSuchAlgorithmException

Problem: A handshake is attempted, and fails when it can not find a required algorithm. Examples might include: 
Exception in thread ...deleted...
     ...deleted...
     Caused by java.security.NoSuchAlgorithmException: Cannot find any
provider supporting RSA/ECB/PKCS1Padding
or 
     Caused by java.security.NoSuchAlgorithmException: Cannot find any
provider supporting AES/CBC/NoPadding

Cause: SunJSSE uses JCE for all of its cryptographic algorithms. By default, the Sun JDK will use the Standard Extension ClassLoader to load the SunJCE provider located in <java-home>/lib/ext/sunjce_provider.jar. If the file can't be found or loaded, or if the SunJCE provider has been deregistered from the Provider mechanism and an alternate implementation from JCE isn't available, this exception will be seen. 

Solution: Ensure the SunJCE is available by checking the file is loadable and that the provider is registered with the Provider interface. Try to run the following code in the context of your SSL connection. 
    import javax.crypto.*;

    System.out.println("=====Where did you get AES=====");
    Cipher c = Cipher.getInstance("AES/CBC/NoPadding");
    System.out.println(c.getProvider());


Сначала на сервере кстати именно этот код стоит и он прекрасненько выводит нам:
Код

=====Where did you get AES=====
java.security.NoSuchAlgorithmException: Cannot find any provider supporting AES/CBC/NoPadding
    at javax.crypto.Cipher.getInstance(DashoA12275)
    at engine.net.SSLServer.main(SSLServer.java:24)
Tue Jul 03 21:51:00 EEST 2007 LOG: Listening...


При этом и пакет sunjce_provider.jar у меня в Eclipse видимый, и в java.security есть такая строчка

Код

security.provider.4=com.sun.crypto.provider.SunJCE


Помогите пожалуйста!!! Что делать?! :( Буду рад любой помощи.

Это сообщение отредактировал(а) progdog - 4.7.2007, 10:20
PM MAIL   Вверх
progdog
Дата 4.7.2007, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



УРЯЯЯЯ, заработало  smile  smile  smile  smile  smile 
 smile  smile  smile  smile  smile  smile  smile  smile  smile  smile 

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

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

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


 




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


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

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