SOCKS крајња тачка вас доводи до веб странице. TLS партнер унутар те везе је сама страница, па проследите име хоста одредишта слојевитој фабрици сокета:

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

Исечак претпоставља стандардне Java мрежне и TLS увозе, постојећу подразумевану конфигурацију поверења и SOCKS везу којој нису потребни акредитиви проксија. Изводи руковање; апликација још мора да пошаље HTTP захтев у формату који сервер очекује. За јавне HTTPS циљеве на дозвољеним јавним рутама списак SOCKS проксија нуди кандидат-крајње тачке; ускладите верзију сервера и подршку за имена хостова са овом Java socket путањом.

Прочитајте два идентитета у примеру

127.0.0.1:1080 је крајња тачка проксија, доступна из овог Java процеса. destination и destinationPort идентификују веб страницу. createUnresolved задржава то име хоста за SOCKS путању уместо да га одмах разреши на клијенту.

Слојевити createSocket прима идентитет одредишта. setEndpointIdentificationAlgorithm("HTTPS") изричито тражи провере имена хоста. Поверење у ланац сертификата сировог SSLSocket-а само по себи не доказује да је провера имена хоста омогућена. Замена имена проксија или loopback-а ради гушења неусклађености може аутентификовати погрешну крајњу тачку.

Задржите поверење и чишћење уз њихове фазе

Подразумевана фабрика користи конфигурисани распоред поверења JVM-а. Апликација са приватним захтевима може уместо тога користити своју исправно иницијализовану SSLContext фабрику. Тај избор је одвојен од SOCKS руте; управник поверења који прихвата сваки сертификат не поправља погрешно име партнера.

Одбијање SOCKS-а дешава се пре TLS-а; непоуздан сертификат или погрешно име хоста пада током TLS-а; након тога може уследити HTTP грешка. Пријава на прокси овлашћује захтев тунела, а не аутентификује веб страницу унутра.

Затварање слојевитог сокета са омогућеним аутоматским затварањем затвара његов транспорт. Спољашњи опсег ресурса такође затвара тај транспорт ако омотавање или руковање не успе пре нормалног довршетка.

Повезани чланци