Javan proxyvirheet 407: tarkista CONNECTin Basic-todennus
Rajaa Javan välityspalvelintunnukset välityspalvelimeen ja tarkista JDK:n erillinen Basic-todennuskäytäntö HTTPS CONNECT -tunneleille.
Toistuva 407 ei aina tarkoita, että Java lähetti väärän salasanan. JDK:n viitetoteutus yleensä poistaa Basic-todennuksen käytöstä HTTPS CONNECT -tunneloinnissa. Pelkkää Basicia tarjoava välityspalvelin voidaan hylätä ennen tunnusten antamista todennuksen takaisinkutsussa.
Rajaa tunnusten takaisinkutsu
Liitä Authenticator Javan HTTP-asiakkaaseen ja rajaa se määritettyyn välityspalvelimeen:
String proxyHost = "203.0.113.10";
int proxyPort = 8080;
String password = System.getenv("PROXY_PASSWORD");
if (password == null) {
throw new IllegalStateException("Set PROXY_PASSWORD");
}
java.net.Authenticator auth = new java.net.Authenticator() {
@Override
protected java.net.PasswordAuthentication getPasswordAuthentication() {
if (getRequestorType() == RequestorType.PROXY
&& proxyHost.equals(getRequestingHost())
&& proxyPort == getRequestingPort()) {
return new java.net.PasswordAuthentication(
"proxy-user", password.toCharArray());
}
return null;
}
};
java.net.http.HttpClient client = java.net.http.HttpClient.newBuilder()
.proxy(java.net.ProxySelector.of(
new java.net.InetSocketAddress(proxyHost, proxyPort)))
.authenticator(auth)
.connectTimeout(java.time.Duration.ofSeconds(5))
.build();
Tämä on asiakkaan määrityskoodia, ei globaali oletustodentaja. Korvaa dokumentaatio-osoite ja käytä palvelulle oikeasti annettuja tunnuksia. Pyytäjätyypin ja päätepisteen tarkistukset estävät samaa takaisinkutsua tarjoamasta välityspalvelintiliä huolettomasti verkkosivuston todennuspyyntöön.
Tarkista, mikä todennusvaihe epäonnistuu
JDK:ssa on erilliset estettyjen menetelmien asetukset tavalliselle HTTP-välitykselle ja CONNECT-tunneloinnille. Nimet ovat jdk.http.auth.proxying.disabledSchemes ja jdk.http.auth.tunneling.disabledSchemes.
Siksi HTTP-liikenne voi todentua, vaikka HTTPS-tunneli saman välityspalvelimen läpi epäonnistuu. Tarkista ajoaikaisen ympäristön conf/net.properties ja käyttöönottokäytäntö sen sijaan, että olettaisit toisen koneen käyttävän samoja vaikuttavia oletuksia.
Estettyjen menetelmien listan globaali tyhjennys ei ole yleinen välityspalvelinkorjaus. Salaamattomalle HTTP-välityspalvelimelle lähetettyjä Basic-tunnuksia ei suojaa myöhempi TLS-yhteys kohteeseen. Arvioi välityspalvelimen siirtotapa, todennusmenetelmä ja käyttöönottokäytäntö ennen muutoksen hyväksymistä.
JDK:n dokumentoitu sisäänrakennettu todennuskäyttäytyminen ei myöskään lupaa tukea jokaista välityspalvelimen mainostamaa menetelmää. Käsin annettu Authorization- tai Proxy-Authorization-otsake muuttaa automaattisen todentajan kulkua, joten tarkista omat otsakkeet, jos takaisinkutsu käyttäytyy eri tavalla kuin esimerkki.