Použite identitu cieľa pre Java TLS cez SOCKS
Najprv sa pripojte cez SOCKS, potom vrstvite SSLSocket s názvom hostiteľa webu a explicitnými kontrolami koncového bodu HTTPS.
Koncový bod SOCKS vás dostane na web. Peer TLS v tomto spojení je samotný web, preto odovzdajte názov hostiteľa cieľa vrstvenej továrni socketov:
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.
}
}Úryvok predpokladá štandardné importy Java networking a TLS, existujúcu predvolenú konfiguráciu dôvery a SOCKS pripojenie bez prihlasovacích údajov proxy. Vykonáva handshake; aplikácia stále musí odoslať HTTP požiadavku vo formáte, ktorý server očakáva. Pre verejné ciele HTTPS na povolených verejných trasách zoznam SOCKS proxy ponúka kandidátske koncové body; zlaďte verziu servera a podporu názvov hostiteľov s touto cestou socketu v Jave.
Prečítajte si v príklade dve identity
127.0.0.1:1080 je koncový bod proxy, dostupný z tohto Java procesu. destination a destinationPort identifikujú web. createUnresolved uchováva tento názov hostiteľa pre cestu SOCKS namiesto toho, aby ho okamžite preložil na klientovi.
Vrstvený createSocket prijíma identitu cieľa. setEndpointIdentificationAlgorithm("HTTPS") výslovne žiada kontroly názvu hostiteľa. Dôvera v reťazec certifikátov holého SSLSocket sama o sebe nepreukazuje, že overovanie názvu hostiteľa je zapnuté. Nahradenie názvu proxy alebo loopbacku na potlačenie nezhody môže autentifikovať nesprávny koncový bod.
Udržujte dôveru a čistenie pri ich fázach
Predvolená továreň používa nakonfigurované usporiadanie dôvery JVM. Aplikácia so súkromnými požiadavkami môže namiesto toho použiť svoju riadne inicializovanú továreň SSLContext. Táto voľba je oddelená od trasy SOCKS; správca dôvery, ktorý prijíma každý certifikát, neopraví nesprávny názov partnera.
Odmietnutie SOCKS nastáva pred TLS; nedôveryhodný certifikát alebo nesprávny názov hostiteľa zlyhá počas TLS; potom môže nasledovať chyba HTTP. Prihlásenie k proxy autorizuje požiadavku tunela, nie autentifikáciu webu v ňom.
Zatvorenie vrstveného socketu s povoleným automatickým zatváraním zatvorí jeho transport. Vonkajší rozsah prostriedkov tiež zatvorí tento transport, ak zabalenie alebo handshake zlyhajú pred normálnym dokončením.