Как захватить HTTPS с Fiddler, в Java

Я использую следующую Java-программу в Eclipse IDE:

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();
    }
}

Это приводит к следующему исключению, если fiddler работает, как во время захвата, так и без захвата:

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 ...

Если я закрою fiddler, программа будет работать без каких-либо исключений, создавая HTML-код по URL, к которому я подключаюсь.

в качестве альтернативы, если я укажуSystem.setProperty("https.proxyPort", "443");, вместо:System.setProperty("https.proxyPort", "8888");, он запускает и печатает все html, без исключения, даже когда fiddler открыт, в режиме захвата, но захват от fiddler по-прежнему отсутствует.

Затем, если я установлю эти системные свойства через аргументы jvm eclipse, такие как:-DproxySet=true -DproxyHost=127.0.0.1 -DproxyPort=8888точно такое же исключение повторяется до тех пор, пока приложение fiddler работает, как в режиме захвата, так и в режиме без захвата. Если я закрою Fiddler, программа будет работать отлично.

Если я использую:System.setProperty("http.proxyHost", "127.0.0.1"); вместо:System.setProperty("http.proxyHost", "localhost");, он работает нормально с запущенным приложением fiddler, как в режиме захвата / без захвата, так и без захваченного трафика.

Кто-нибудь может захватить собственный https-трафик с помощью fiddler, НЕ через веб-браузер, а через java-программу? Каковы аргументы jvm, как вы это настроите? Спасибо

Ответы на вопрос(4)

Ваш ответ на вопрос