SOCKS-i lõpp-punkt viib sind veebisaidile. Selle ühenduse sees olev TLS-partner on veebisait ise, seega anna sihtkoha hostinimi kihilisele soketi tehasesse:

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

Katkend eeldab standardseid Java võrgu- ja TLS-i impordi, olemasolevat vaikimisi usaldusseadistust ja SOCKS-ühendust, mis ei vaja puhverserveri mandaate. See teostab käepigistuse; rakendus peab siiski saatma HTTP-päringu serveri ootuses formaadis. Avalike HTTPS-sihtmärkide jaoks lubatud avalikel marsruutidel pakub SOCKS-puhverserverite loend kandidaat-lõpp-punkte; sobitage serveri versioon ja hostinimede tugi selle Java soketi teega.

Lugege näites kahte identiteeti

127.0.0.1:1080 on puhverserveri lõpp-punkt, kättesaadav sellest Java protsessist. destination ja destinationPort identifitseerivad veebisaidi. createUnresolved säilitab selle hostinime SOCKS-tee jaoks, selle asemel et seda kliendis kohe lahendada.

Kihiline createSocket võtab vastu sihtkoha identiteedi. setEndpointIdentificationAlgorithm("HTTPS") küsib selgesõnaliselt selle hostinime kontrolle. Toore SSLSocketi sertifikaadiahela usaldus ei tõesta iseenesest, et hostinime kontrollimine on lubatud. Puhverserveri nime või loopbacki asendamine lahknevuse mahasurumiseks võib autentida vale lõpp-punkti.

Hoidke usaldus ja koristamine oma etappides

Vaikimisi tehas kasutab JVM-i konfigureeritud usalduskorda. Eranõuetega rakendus võib selle asemel kasutada oma nõuetekohaselt algatatud SSLContext tehast. See valik on SOCKS-marsruudist eraldi; iga sertifikaati aktsepteeriv usaldushaldur ei paranda valet partneri nime.

SOCKS-i keeldumine toimub enne TLS-i; usaldamata sertifikaat või vale hostinimi ebaõnnestub TLS-i ajal; seejärel võib järgneda HTTP-viga. Puhverserverisse sisselogimine volitab tunnelipäringu, mitte ei autendi selle sees olevat veebisaiti.

Kihilise soketi sulgemine automaatse sulgemisega sulgeb selle transpordi. Välimine ressursiplokk sulgeb selle transpordi ka siis, kui mähkimine või käepigistus ebaõnnestub enne normaalset lõppu.

Seotud artiklid