BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 24 июн 2025, 14:49

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Https соединение с сертификатами
СообщениеДобавлено: 21 мар 2013, 22:28 
Не в сети

Зарегистрирован: 05 окт 2007, 13:36
Сообщения: 1073
Карма: 46
как на джаве установить хттпс соединение и сертификаты прикрепить? Не хватает теоретических знаний тут, т.к. гугла ответов тонну перепробовал, не устанавливается. то сертификаты не находит валидные, то еще что.

на пхп, перле и т.д. все работает без проблем.

Код:
$ch = curl_init('https://someserv.com/page');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSLKEY,  'key.key');
curl_setopt($ch, CURLOPT_SSLCERT, 'cert.crt');
//curl_setopt($ch, CURLOPT_SSLCERTPASSWD, 'password');
$data = curl_exec($ch);
print curl_error($ch) ;
curl_close($ch);

работает норм. хочу тоже самое на джава.

что нарыл в инете
Код:
public class JavaHttpsExample
{
  public static void main(String[] args)
  throws Exception
  {
    String httpsURL = "'https://someserv.com/page'";
//   System.setProperty("javax.net.ssl.trustStore","server.jks");
    URL myurl = new URL(httpsURL);
    HttpsURLConnection con = (HttpsURLConnection)myurl.openConnection();
   SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
   con.setSSLSocketFactory(sslsocketfactory);   
//   con.setSSLSocketFactory(getSSLContext(new File("digbank.p12"), "d1gkfldit").getSocketFactory());
    InputStream ins = con.getInputStream();
    InputStreamReader isr = new InputStreamReader(ins);
    BufferedReader in = new BufferedReader(isr);

    String inputLine;

    while ((inputLine = in.readLine()) != null)
    {
      System.out.println(inputLine);
    }

    in.close();
  }

   public static SSLContext getSSLContext(File jksFile, String jksPwd) throws Exception {

      // Constructing KeyStore from file with password
      KeyStore trustStore = KeyStore.getInstance("pkcs12");
      FileInputStream in = new FileInputStream(jksFile);
      trustStore.load(in, jksPwd.toCharArray());
      in.close();

      // Initializing the keystore
      KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
      kmf.init(trustStore, jksPwd.toCharArray());

      // Initializing the trustore
      TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
      tmf.init(trustStore);

      // Here comes the context
      SSLContext sslContext = SSLContext.getInstance("SSL");
      sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);

      return sslContext;
   }
}


и снаружи передаю в параметрах эти кейстор, трастстор, и изнутри программы. все равно ошибки.
запускаю с параметрами
Код:
java -Djavax.net.ssl.keyStoreType=pkcs12 -Djavax.net.ssl.trustStoreType=jks -Djavax.net.ssl.keyStore=digbank.p12 -Djavax.net.ssl.trustStore=digb.jks -Djavax.net.debug=ssl -Djavax.net.ssl.keyStorePassword=d1gkfldit -Djavax.net.ssl.trustStorePassword=123456 JavaHttpsExample

разные варианты пробую, в основном ошибка
Код:
Exception in thread "main" javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: No trusted certificate found
        at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Unknown Source)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(Unknown Source)
        at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Unknown Source)
        at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Unknown Source)
        at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(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 com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(Unknown Source)
        at sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)
        at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
        at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(Unknown Source)
        at JavaHttpsExample.main(JavaHttpsExample.java:24)
Caused by: sun.security.validator.ValidatorException: No trusted certificate found
        at sun.security.validator.SimpleValidator.buildTrustedChain(Unknown Source)
        at sun.security.validator.SimpleValidator.engineValidate(Unknown Source)
        at sun.security.validator.Validator.validate(Unknown Source)
        at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.validate(Unknown Source)
        at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(Unknown Source)
        at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(Unknown Source)
        ... 13 more

_________________
интеграция биллинга с 1с http://bgbilling-1c.ru/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Https соединение с сертификатами
СообщениеДобавлено: 21 мар 2013, 22:31 
Не в сети

Зарегистрирован: 05 окт 2007, 13:36
Сообщения: 1073
Карма: 46
Или поделитесь рабочим кодом на джава, чтобы хттпс соединение устанавливалось с сертификатом.

_________________
интеграция биллинга с 1с http://bgbilling-1c.ru/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Https соединение с сертификатами
СообщениеДобавлено: 22 мар 2013, 00:02 
Не в сети
Разработчик

Зарегистрирован: 07 апр 2007, 23:51
Сообщения: 4494
Откуда: Уфа, Россия
Карма: 187
утилитой jcontrol из /jdk/bin закладка security, кнопка Certificates
импортнуть нужный сертификат в доверенные
утилиту надо запускать под тем пользователем под которым будет потом запускться java приложение


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Https соединение с сертификатами
СообщениеДобавлено: 22 мар 2013, 04:46 
Не в сети
Клиент

Зарегистрирован: 12 фев 2008, 18:10
Сообщения: 3951
Карма: 249
skn писал(а):
закладка security, кнопка Certificates

Походу речь идет о динкоде на сервере без закладок, кнопок и прочих GUI.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Https соединение с сертификатами
СообщениеДобавлено: 22 мар 2013, 15:33 
Не в сети

Зарегистрирован: 05 окт 2007, 13:36
Сообщения: 1073
Карма: 46
Добавил сертификат туда. он самоподписанный.
ошибка
Код:
java -Djavax.net.debug=ssl JavaHttpsExample >out
Exception in thread "main" javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.securit
y.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
        at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Unknown Source)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(Unknown Source)
        at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Unknown Source)
        at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Unknown Source)
        at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(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 com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(Unknown Source)
        at sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)
        at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
        at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(Unknown Source)
        at JavaHttpsExample.main(JavaHttpsExample.java:24)
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unab
le to find valid certification path to requested target
        at sun.security.validator.PKIXValidator.doBuild(Unknown Source)
        at sun.security.validator.PKIXValidator.engineValidate(Unknown Source)
        at sun.security.validator.Validator.validate(Unknown Source)
        at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.validate(Unknown Source)
        at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(Unknown Source)
        at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(Unknown Source)
        ... 13 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
        at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(Unknown Source)
        at java.security.cert.CertPathBuilder.build(Unknown Source)
        ... 19 more

Вот дебаг ссл
Код:
...


Не понимаю как дебагить. в чем проблема, в сертификате или в джаве.

_________________
интеграция биллинга с 1с http://bgbilling-1c.ru/


Последний раз редактировалось Akhmat 25 мар 2013, 20:36, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Https соединение с сертификатами
СообщениеДобавлено: 22 мар 2013, 21:07 
Не в сети
Разработчик

Зарегистрирован: 07 апр 2007, 23:51
Сообщения: 4494
Откуда: Уфа, Россия
Карма: 187
вот кусок кода, может на что то наведет...

Код:
         TrustManager manager = (new X509TrustManager()
         {
            public void checkClientTrusted(X509Certificate[] arg0, String arg1)
                  throws CertificateException
            {

            }

            public void checkServerTrusted(X509Certificate[] arg0, String arg1)
                  throws CertificateException
            {

            }

            public X509Certificate[] getAcceptedIssuers()
            {
               return null;
            }
         });

         SSLContext context = SSLContext.getInstance( "SSL" );

         KeyStore ks = KeyStore.getInstance( ksType );
         ks.load( new BufferedInputStream( new FileInputStream( ksFile ) ), ksPass.toCharArray() );

         KeyManagerFactory kmf = KeyManagerFactory.getInstance( "SunX509", "SunJSSE" );
         kmf.init( ks, keyPass.toCharArray() );

         TrustManagerFactory tmf = TrustManagerFactory.getInstance( "SunX509", "SunJSSE" );
         tmf.init( ks );

         context.init( kmf.getKeyManagers(), new TrustManager[]
         { manager }, null );

         SSLSocketFactory factory = (SSLSocketFactory)context.getSocketFactory();

         URL ur = new URL( url );

         HttpsURLConnection con = (HttpsURLConnection)ur.openConnection();


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Https соединение с сертификатами
СообщениеДобавлено: 25 мар 2013, 15:05 
Не в сети

Зарегистрирован: 05 окт 2007, 13:36
Сообщения: 1073
Карма: 46
охохо, заработало!!! я не верю. ты спас мне жизнь

_________________
интеграция биллинга с 1с http://bgbilling-1c.ru/


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
POWERED_BY
Русская поддержка phpBB
[ Time : 0.037s | 29 Queries | GZIP : On ]