SOCKS-endepunktet fører deg til nettstaden. TLS-motparten inne i den sambandet er nettstaden sjølv, så send vertsnamnet til målet til den lagdelte socketfabrikken:

String destination = "example.com";
int destinationPort = 443;
Proxy proxy = new Proxy(
    Proxy.Type.SOCKS,
    new InetSocketAddress("127.0.0.1", 1080)
);

try (Socket transport = new Socket(proxy)) {
    transport.connect(
        InetSocketAddress.createUnresolved(destination, destinationPort),
        5000
    );
    SSLSocketFactory factory =
        (SSLSocketFactory) SSLSocketFactory.getDefault();
    try (SSLSocket tls = (SSLSocket) factory.createSocket(
            transport, destination, destinationPort, true)) {
        SSLParameters parameters = tls.getSSLParameters();
        parameters.setEndpointIdentificationAlgorithm("HTTPS");
        tls.setSSLParameters(parameters);
        tls.setSoTimeout(15000);
        tls.startHandshake();
        // Send the application's HTTPS request through tls.
    }
}

Utdraget føreset standard Java-nettverks- og TLS-importar, ein eksisterande standard tillitskonfigurasjon og eit SOCKS-samband som ikkje treng proxy-påloggingsinformasjon. Det utfører handtrykket; programmet må framleis senda ein HTTP-førespurnad i formatet tenaren ventar. For offentlege HTTPS-mål på tillatne offentlege ruter tilbyr SOCKS-proxylista kandidatendepunkt; tilpass versjonen til tenaren og vertsnamnstøtta til denne Java-socketvegen.

Les dei to identitetane i dømet

127.0.0.1:1080 er proxy-endepunktet, tilgjengeleg frå denne Java-prosessen. destination og destinationPort identifiserer nettstaden. createUnresolved held på vertsnamnet for SOCKS-vegen i staden for å slå det opp på førehand hjå klienten.

Det lagdelte createSocket tek imot identiteten til målet. setEndpointIdentificationAlgorithm("HTTPS") ber uttrykkeleg om vertsnavnkontrollane sine. Tillit til sertifikatkjeda til eit rått SSLSocket provar ikkje i seg sjølv at vertsnamnvalidering er slått på. Å byta ut namnet til proxyen eller loopback for å dempa eit avvik kan autentisere feil endepunkt.

Hald tillit og opprydding saman med fasane sine

Standardfabrikken brukar den konfigurerte tillitsordninga til JVM-en. Eit program med private krav kan i staden bruka sin rett initialiserte SSLContext-fabrikk. Det valet er skilt frå SOCKS-ruta; ein tillitshandsamar som godtek kvart sertifikat, reparerer ikkje eit feil motpartsnamn.

Ei SOCKS-avvising skjer før TLS; eit sertifikat ein ikkje stolar på eller eit feil vertsnamn feilar under TLS; ein HTTP-feil kan koma etterpå. Pålogging til proxyen autoriserer tunnel-førespurnaden i staden for å autentisere nettstaden inni han.

Lukking av det lagdelte socketet med automatisk lukking slått på lukkar transporten. Den ytre ressursblokka lukkar også den transporten om innpakkinga eller handtrykket feilar før normal fullføring.

Relaterte artiklar