Käytä kohteen identiteettiä Java TLS:ään SOCKSin yli
Yhdistä ensin SOCKSin kautta ja kerrosta sitten SSLSocket verkkosivuston isäntänimellä ja eksplisiittisillä HTTPS-päätepisteen tarkistuksilla.
SOCKS-päätepiste vie sinut verkkosivustolle. Kyseisen yhteyden sisäinen TLS-vastapuoli on sivusto itse, joten välitä kohteen isäntänimi kerrostetulle socket-tehtaalle:
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.
}
}Katkelma olettaa tavalliset Java-verkko- ja TLS-tuonnit, olemassa olevan oletusluottamusasetuksen ja SOCKS-yhteyden, joka ei tarvitse välityspalvelimen tunnuksia. Se suorittaa kättelyn; sovelluksen on silti lähetettävä HTTP-pyyntö palvelimen odottamassa muodossa. Julkisille HTTPS-kohteille sallituilla julkisilla reiteillä SOCKS-välityspalvelinluettelo tarjoaa ehdokaspäätepisteitä; sovita palvelimen versio ja isäntänimien tuki tähän Java-socketpolkuun.
Lue esimerkin kaksi identiteettiä
127.0.0.1:1080 on välityspalvelimen päätepiste, tavoitettavissa tästä Java-prosessista. destination ja destinationPort tunnistavat sivuston. createUnresolved säilyttää isäntänimen SOCKS-polkua varten sen sijaan, että se ratkaistaisiin heti asiakkaassa.
Kerrostettu createSocket vastaanottaa kohteen identiteetin. setEndpointIdentificationAlgorithm("HTTPS") pyytää nimenomaisesti sen isäntänimitarkistukset. Raaka SSLSocketin varmenneketjun luottamus ei sinänsä todista, että isäntänimen vahvistus on käytössä. Välityspalvelimen nimen tai loopbackin korvaaminen epäsuhdan vaimentamiseksi voi todentaa väärän päätepisteen.
Pidä luottamus ja siivous vaiheidensa yhteydessä
Oletustehas käyttää JVM:n määritettyä luottamusjärjestelyä. Sovellus, jolla on yksityisiä vaatimuksia, voi sen sijaan käyttää asianmukaisesti alustettua SSLContext-tehdastaan. Tämä valinta on erillään SOCKS-reitistä; jokaisen varmenteen hyväksyvä luottamushallinta ei korjaa väärää vastapuolen nimeä.
SOCKS-hylkäys tapahtuu ennen TLS:ää; epäluotettu varmenne tai väärä isäntänimi epäonnistuu TLS:n aikana; sen jälkeen voi seurata HTTP-virhe. Välityspalvelimeen kirjautuminen valtuuttaa tunnelipyynnön eikä todista sen sisällä olevaa sivustoa.
Kerrostetun socketin sulkeminen automaattinen sulkeminen käytössä sulkee sen kuljetuksen. Ulompi resurssialue sulkee myös kyseisen kuljetuksen, jos kääriminen tai kättely epäonnistuu ennen normaalia valmistumista.