SOCKS galinis taškas nukelia jus į svetainę. TLS partneris toje jungtyje yra pati svetainė, todėl perduokite paskirties mazgo vardą sluoksniuotai lizdų gamyklai:

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

Šis fragmentas daro prielaidą, kad naudojami standartiniai Java tinklo ir TLS importai, egzistuoja numatytoji pasitikėjimo konfigūracija ir SOCKS jungtis, kuriai nereikia tarpinio serverio prisijungimo duomenų. Jis atlieka rankos paspaudimą; programa vis tiek turi išsiųsti HTTP užklausą serverio laukiamu formatu. Viešiesiems HTTPS tikslams leistinuose viešuose maršrutuose SOCKS tarpinių serverių sąrašas siūlo kandidatinius galinius taškus; suderinkite serverio versiją ir mazgo vardų palaikymą su šiuo Java lizdo keliu.

Perskaitykite dvi tapatybes pavyzdyje

127.0.0.1:1080 yra tarpinio serverio galinis taškas, pasiekiamas iš šio Java proceso. destination ir destinationPort nurodo svetainę. createUnresolved išsaugo tą mazgo vardą SOCKS keliui, o ne išsprendžia jį iš anksto kliente.

Sluoksniuotas createSocket gauna paskirties tapatybę. setEndpointIdentificationAlgorithm("HTTPS") aiškiai prašo savo mazgo vardo patikrinimų. Neapdoroto SSLSocket sertifikatų grandinės pasitikėjimas pats savaime neįrodo, kad mazgo vardo tikrinimas įjungtas. Tarpinio serverio vardo ar loopback pakeitimas nesutapimui slopinti gali autentifikuoti neteisingą galinį tašką.

Laikykite pasitikėjimą ir valymą jų etapuose

Numatytoji gamykla naudoja sukonfigūruotą JVM pasitikėjimo tvarką. Programa su privačiais reikalavimais vietoj to gali naudoti tinkamai inicijuotą SSLContext gamyklą. Šis pasirinkimas atskirtas nuo SOCKS maršruto; pasitikėjimo tvarkyklė, priimanti kiekvieną sertifikatą, nepataiso neteisingo partnerio vardo.

SOCKS atmetimas įvyksta prieš TLS; nepatikimas sertifikatas arba neteisingas mazgo vardas nepavyksta TLS metu; po to gali kilti HTTP klaida. Prisijungimas prie tarpinio serverio įgalioja tunelio užklausą, o ne autentifikuoja svetainę jos viduje.

Sluoksniuoto lizdo uždarymas su įjungtu automatiniu uždarymu uždaro jo transportą. Išorinė išteklių sritis taip pat uždaro tą transportą, jei įvyniojimas arba rankos paspaudimas nepavyksta prieš įprastą užbaigimą.

Susiję straipsniai