Java-proxyfejl 407: kontroller Basic-godkendelse til CONNECT
Afgræns Java-proxylogin til proxyen, og kontroller JDK’ens særskilte Basic-politik for HTTPS CONNECT-tunneler.
Gentagne 407 betyder ikke altid, at Java sendte en forkert adgangskode. JDK’ens referenceimplementering deaktiverer normalt Basic-godkendelse til HTTPS CONNECT-tunneler. En proxy, der kun tilbyder Basic, kan blive afvist, før din godkendelses-callback leverer loginoplysninger.
Afgræns callbacken til loginoplysninger
Knyt en Authenticator til Java-HTTP-klienten, og begræns den til den konfigurerede proxy:
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();
Dette er opsætningskode til en klient, ikke en global standardgodkender. Erstat dokumentationsadressen, og brug loginoplysninger, der faktisk er udleveret til tjenesten. Kontrol af anmodertype og endepunkt forhindrer callbacken i uden videre at tilbyde proxykontoen til et websteds godkendelsesudfordring.
Kontroller, hvilket godkendelsestrin der fejler
JDK’en har separate indstillinger for deaktiverede skemaer til almindelig HTTP-proxybrug og CONNECT-tunneler. Navnene er jdk.http.auth.proxying.disabledSchemes og jdk.http.auth.tunneling.disabledSchemes.
Det forklarer, hvorfor HTTP-trafik kan godkendes, mens en HTTPS-tunnel gennem samme proxy fejler. Kontroller runtime-miljøets conf/net.properties og udrulningspolitikken frem for at antage samme effektive standarder på en anden maskine.
Global tømning af en liste over deaktiverede skemaer er ikke en generel proxyreparation. Basic-oplysninger sendt til en HTTP-proxy i klartekst beskyttes ikke af destinationens senere TLS-forbindelse. Gennemgå proxytransporten, godkendelsesmetoden og udrulningspolitikken, før en ændring godkendes.
JDK’ens dokumenterede indbyggede godkendelsesadfærd lover heller ikke støtte til hvert skema, en proxy annoncerer. En manuelt angivet Authorization- eller Proxy-Authorization-header ændrer det automatiske godkendelsesforløb, så undersøg egne headere, når callbacken opfører sig anderledes end eksemplet.