forum.bitel.ru http://forum.bitel.ru/ |
|
Https соединение с сертификатами http://forum.bitel.ru/viewtopic.php?f=19&t=7867 |
Страница 1 из 1 |
Автор: | Akhmat [ 21 мар 2013, 22:28 ] |
Заголовок сообщения: | Https соединение с сертификатами |
как на джаве установить хттпс соединение и сертификаты прикрепить? Не хватает теоретических знаний тут, т.к. гугла ответов тонну перепробовал, не устанавливается. то сертификаты не находит валидные, то еще что. на пхп, перле и т.д. все работает без проблем. Код: $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 |
Автор: | Akhmat [ 21 мар 2013, 22:31 ] |
Заголовок сообщения: | Re: Https соединение с сертификатами |
Или поделитесь рабочим кодом на джава, чтобы хттпс соединение устанавливалось с сертификатом. |
Автор: | skn [ 22 мар 2013, 00:02 ] |
Заголовок сообщения: | Re: Https соединение с сертификатами |
утилитой jcontrol из /jdk/bin закладка security, кнопка Certificates импортнуть нужный сертификат в доверенные утилиту надо запускать под тем пользователем под которым будет потом запускться java приложение |
Автор: | snark [ 22 мар 2013, 04:46 ] |
Заголовок сообщения: | Re: Https соединение с сертификатами |
skn писал(а): закладка security, кнопка Certificates Походу речь идет о динкоде на сервере без закладок, кнопок и прочих GUI. |
Автор: | Akhmat [ 22 мар 2013, 15:33 ] |
Заголовок сообщения: | Re: Https соединение с сертификатами |
Добавил сертификат туда. он самоподписанный. ошибка Код: 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 Вот дебаг ссл Код: ... Не понимаю как дебагить. в чем проблема, в сертификате или в джаве. |
Автор: | skn [ 22 мар 2013, 21:07 ] |
Заголовок сообщения: | Re: Https соединение с сертификатами |
вот кусок кода, может на что то наведет... Код: 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(); |
Автор: | Akhmat [ 25 мар 2013, 15:05 ] |
Заголовок сообщения: | Re: Https соединение с сертификатами |
охохо, заработало!!! я не верю. ты спас мне жизнь |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |