Použijte identitu cíle pro Java TLS přes SOCKS
Nejprve se připojte přes SOCKS, poté vrstvěte SSLSocket s názvem hostitele webu a explicitními kontrolami HTTPS koncového bodu.
Koncový bod SOCKS vás dostane na web. Peer TLS v tomto spojení je samotný web, proto předejte název hostitele cíle vrstvené továrně socketů:
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.
}
}Úryvek předpokládá standardní importy Java networking a TLS, existující výchozí konfiguraci důvěry a SOCKS připojení bez přihlašovacích údajů proxy. Provádí handshake; aplikace stále musí odeslat HTTP požadavek ve formátu očekávaném serverem. Pro veřejné cíle HTTPS na povolených veřejných trasách nabízí seznam SOCKS proxy kandidátní koncové body; sluďte verzi serveru a podporu názvů hostitelů s touto cestou socketu v Javě.
Přečtěte si v příkladu dvě identity
127.0.0.1:1080 je koncový bod proxy, dostupný z tohoto Java procesu. destination a destinationPort identifikují web. createUnresolved uchovává tento název hostitele pro cestu SOCKS, místo aby jej okamžitě překládal na klientovi.
Vrstvený createSocket přijímá identitu cíle. setEndpointIdentificationAlgorithm("HTTPS") výslovně vyžaduje kontroly názvu hostitele. Důvěra v řetězec certifikátů holého SSLSocket sama o sobě neprokazuje, že ověřování názvu hostitele je zapnuté. Nahrazení názvu proxy nebo loopbacku za účelem potlačení neshody může autentizovat nesprávný koncový bod.
Udržujte důvěru a úklid u jejich fází
Výchozí továrna používá nakonfigurované uspořádání důvěry JVM. Aplikace se soukromými požadavky může místo toho použít svou řádně inicializovanou továrnu SSLContext. Tato volba je oddělená od trasy SOCKS; správce důvěry přijímající každý certifikát neopraví nesprávný název protějšku.
Odmítnutí SOCKS nastává před TLS; nedůvěryhodný certifikát nebo nesprávný název hostitele selže během TLS; poté může následovat chyba HTTP. Přihlášení k proxy autorizuje požadavek tunelu, nikoli autentizaci webu uvnitř.
Zavřením vrstveného socketu s povoleným automatickým zavřením se zavře jeho transport. Vnější rozsah prostředku také zavře tento transport, pokud zabalení nebo handshake selžou před normálním dokončením.