Die SOCKS-eindpunt bring jou by die webwerf. Die TLS-eweknie binne daardie verbinding is die webwerf self, so gee die bestemming se gasheernaam aan die gelaagde sokfabriek:

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

Die fragment veronderstel standaard Java-netwerk- en TLS-invoere, 'n bestaande verstekvertrouekonfigurasie en 'n SOCKS-verbinding wat geen proxybewyse nodig het nie. Dit voer die handdruk uit; die toepassing moet steeds 'n HTTP-versoek in die bediener se verwagte formaat stuur. Vir openbare HTTPS-teikens op toegelate openbare roetes bied die SOCKS-proxylys kandidaat-eindpunte; pas die bediener se weergawe en gasheernaamondersteuning by hierdie Java-sokpad aan.

Lees die twee identiteite in die voorbeeld

127.0.0.1:1080 is die proxy-eindpunt, bereikbaar vanaf hierdie Java-proses. destination en destinationPort identifiseer die webwerf. createUnresolved behou daardie gasheernaam vir die SOCKS-pad in plaas daarvan om dit gretig by die kliënt op te los.

Die gelaagde createSocket ontvang die bestemming se identiteit. setEndpointIdentificationAlgorithm("HTTPS") versoek eksplisiet sy gasheernaamkontroles. 'n Rou SSLSocket se sertifikaatkettingvertroue bewys nie op sigself dat gasheernaamverifikasie geaktiveer is nie. Om die proxy se naam of loopback te vervang om 'n wanverhouding te onderdruk, kan die verkeerde eindpunt verifieer.

Hou vertroue en opruiming by hul fases

Die verstekfabriek gebruik die JVM se gekonfigureerde vertrouereëling. 'n Toepassing met private vereistes kan eerder sy behoorlik geïnisialiseerde SSLContext-fabriek gebruik. Daardie keuse staan apart van die SOCKS-roete; 'n vertrouebestuurder wat elke sertifikaat aanvaar, herstel nie 'n verkeerde eweknie-naam nie.

'n SOCKS-verwerping vind voor TLS plaas; 'n onvertroude sertifikaat of verkeerde gasheernaam misluk tydens TLS; 'n HTTP-fout kan daarna volg. Proxy-aanmelding magtig die tonnelversoek eerder as om die webwerf daarin te verifieer.

Om die gelaagde sok te sluit met outo-sluit geaktiveer, sluit sy vervoer. Die buitenste hulpbronomvang sluit ook daardie vervoer as die omhulling of handdruk voor normale voltooiing misluk.

Verwante artikels