Brûk de identiteit fan it bestimming foar Java TLS oer SOCKS
Ferbinje earst fia SOCKS, en liz dan in SSLSocket mei de hostnamme fan 'e website en eksplisite HTTPS-einpuntkontrôles.
It SOCKS-einpunt bringt jo by de website. De TLS-peer yn dy ferbining is de website sels, dus jou de hostnamme fan 'e bestimming oan 'e lagen socketfabryk:
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.
}
}It fragmint ferûnderstelt standert Java-netwurk- en TLS-ymporten, in besteande standert fertrouwenskonfiguraasje en in SOCKS-ferbining sûnder proxy-credentials. It fiert de hânsdruk út; de applikaasje moat noch in HTTP-fersyk stjoere yn it formaat dat de tsjinner ferwachtet. Foar publike HTTPS-doelen op tastiene publike rûtes biedt de SOCKS-proxylist kandidaat-einpunten; lykje de ferzje fan 'e tsjinner en hostnamme-stipe ôf op dit Java-socketpaad.
Lês de beide identiteiten yn it foarbyld
127.0.0.1:1080 is it proxy-einpunt, berikber fanút dit Java-proses. destination en destinationPort identifisearje de website. createUnresolved behâldt dy hostnamme foar it SOCKS-paad ynstee fan it daliks op 'e klient op te lossen.
De lagen createSocket ûntfangt de identiteit fan 'e bestimming. setEndpointIdentificationAlgorithm("HTTPS") freget eksplisyt om syn hostnamme-kontrôles. It fertrouwen fan in sertifikaatkeatling fan in rau SSLSocket bewissiget op himsels net dat hostnammeferifikaasje oan is. It ferfangen fan 'e proxynamme of loopback om in mismatching te ûnderdrukken kin it ferkearde einpunt autentisearje.
Hâld fertrouwen en opromjen by har fases
De standert fabryk brûkt de konfigurearre fertrouwensregeling fan 'e JVM. In applikaasje mei partikuliere easken kin ynstee syn goed initialisearre SSLContext-fabryk brûke. Dy kar stiet los fan 'e SOCKS-rûte; in fertrouwensbehearder dy't elk sertifikaat akseptearret reparearret gjin ferkearde peer-namme.
In SOCKS-ôfwizing bart foar TLS; in net fertroud sertifikaat of ferkearde hostnamme mislearret by TLS; dêrnei kin in HTTP-flater folgje. Proxy-oanmelding autorisearret it tunnel-fersyk ynstee fan 'e website deryn te autentisearjen.
It sluten fan 'e lagen socket mei autofsluten ynskeakele slút syn transport. It bûtenste boarneskoop slút dat transport ek as it ynpakken of de hânsdruk mislearret foar normale foltôging.