как на джаве установить хттпс соединение и сертификаты прикрепить? Не хватает теоретических знаний тут, т.к. гугла ответов тонну перепробовал, не устанавливается. то сертификаты не находит валидные, то еще что.
на пхп, перле и т.д. все работает без проблем.
Код:
$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