Estoy funcionando el siguiente programa Java en el IDE Eclipse:cómo capturar https con el violinista, en Java
import java.net.*;
import java.io.*;
public class HH
{
public static void main(String[] args)throws Exception
{
//if i comment out the system properties, and don't set any jvm arguments, the program runs and prints out the html fine.
System.setProperty("http.proxyHost", "localhost");
System.setProperty("http.proxyPort", "8888");
System.setProperty("https.proxyHost", "localhost");
System.setProperty("https.proxyPort", "8888");
URL x=new URL("https://www.google.com");
HttpURLConnection hc=(HttpURLConnection)x.openConnection();
hc.setRequestProperty("User-Agent","Mozilla/5.0 (Windows NT 6.0)
AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2");
InputStream is=hc.getInputStream();
int u=0;
byte[] kj=new byte[1024];
while((u=is.read(kj))!=-1)
{
System.out.write(kj,0,u);
}
is.close();
}
}
Esto produce la siguiente excepción, si el violinista está en marcha, tanto durante la captura, y no la captura:
Exception in thread "main" javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.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 ...
Si cierro el violinista, el programa funciona muy bien y sin ninguna excepción, produciendo el html en la url que estoy conectando.
alternativamente, si especifico System.setProperty("https.proxyPort", "443");
, en lugar de: System.setProperty("https.proxyPort", "8888");
, se ejecuta e imprime todo el HTML, sin excepciones, incluso mientras el violinista está abierto, en el modo de captura, pero todavía no hay una captura de violinista en absoluto.
Luego, si establezco estas propiedades del sistema a través de los argumentos jvm de eclipse como: -DproxySet=true -DproxyHost=127.0.0.1 -DproxyPort=8888
, la misma excepción exacta ocurre nuevamente, siempre y cuando la aplicación fiddler se esté ejecutando, tanto en modo de captura como de no captura. Si cierro el violín, el programa funcionará perfectamente bien.
Si uso: System.setProperty("http.proxyHost", "127.0.0.1");
, en lugar de: System.setProperty("http.proxyHost", "localhost");
, funciona bien con la aplicación fiddler ejecutándose, tanto el modo de cap/no captura, como el tráfico NO capturado.
¿Hay alguien por ahí, capaz de capturar su propio tráfico https con el violín, NO a través de un navegador web, sino a través de un programa java? ¿Cuáles son los argumentos de jvm? ¿Cómo se configura para hacer esto? gracias
no has conjunto proveedor de SSL, almacén de claves, almacén de confianza, etc – aishwarya
cómo se puede hacer esto –
revise esta guía: http: //codeketchup.blogspot.com/2014/03/how-to-use-eclipse-with-fiddler-step-by.html –