Končna točka SOCKS vas pripelje do spletnega mesta. Partner TLS znotraj te povezave je spletno mesto samo, zato posredujte ime gostitelja cilja plastni tovarni vtičnic:

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

Delček predpostavlja standardne uvoze Java networking in TLS, obstoječo privzeto konfiguracijo zaupanja in povezavo SOCKS, ki ne potrebuje poverilnic proxyja. Izvede rokovanje; aplikacija mora še vedno poslati zahtevo HTTP v obliki, ki jo strežnik pričakuje. Za javne cilje HTTPS na dovoljenih javnih poteh seznam proxyjev SOCKS ponuja kandidatne končne točke; uskladite različico strežnika in podporo imenom gostiteljev s to potjo vtičnice Java.

Preberite dve identiteti v primeru

127.0.0.1:1080 je končna točka proxyja, dosegljiva iz tega procesa Java. destination in destinationPort identificirata spletno mesto. createUnresolved ohrani to ime gostitelja za pot SOCKS, namesto da bi ga takoj razrešil na odjemalcu.

Plastni createSocket prejme identiteto cilja. setEndpointIdentificationAlgorithm("HTTPS") izrecno zahteva svoja preverjanja imena gostitelja. Zaupanje v verigo potrdil surovega SSLSocket samo po sebi ne dokazuje, da je preverjanje imena gostitelja omogočeno. Zamenjava imena proxyja ali loopbacka za zatiranje neujemanja lahko overi napačno končno točko.

Ohranite zaupanje in čiščenje pri njunih stopnjah

Privzeta tovarna uporablja konfigurirano ureditev zaupanja JVM. Aplikacija z zasebnimi zahtevami lahko namesto tega uporabi svojo pravilno inicializirano tovarno SSLContext. Ta izbira je ločena od poti SOCKS; upravitelj zaupanja, ki sprejme vsako potrdilo, ne popravi napačnega imena partnerja.

Zavrnitev SOCKS se zgodi pred TLS; nezaupljivo potrdilo ali napačno ime gostitelja spodleti med TLS; zatem lahko sledi napaka HTTP. Prijava v proxy pooblasti zahtevo za tunel, ne overi pa spletnega mesta v njem.

Zaprtje plastne vtičnice z omogočenim samodejnim zapiranjem zapre njen prenos. Zunanji obseg virov prav tako zapre ta prenos, če ovijanje ali rokovanje spodleti pred običajnim dokončanjem.

Sorodni članki