Errors 407 de proxy a Java: comprova Basic per a CONNECT
Limita les credencials del proxy Java al proxy i comprova la política Basic independent del JDK per als túnels HTTPS CONNECT.
Un 407 repetit no sempre vol dir que Java hagi enviat una contrasenya incorrecta. La implementació de referència del JDK normalment desactiva l’autenticació Basic per als túnels HTTPS CONNECT. Un proxy que només ofereix Basic pot ser rebutjat abans que el callback d’autenticació proporcioni credencials.
Limita l’abast del callback de credencials
Afegeix un Authenticator a client HTTP de Java i limita’l al proxy configurat:
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();
Aquest és codi de configuració d’un client, no un autenticador global predeterminat. Substitueix l’adreça de documentació i utilitza credencials realment facilitades per a aquell servei. Les comprovacions del tipus de sol·licitant i del punt de connexió eviten que el mateix callback ofereixi sense més el compte del proxy a una petició d’autenticació d’un lloc web.
Comprova quina fase d’autenticació falla
El JDK té paràmetres d’esquemes desactivats diferents per al proxy HTTP normal i els túnels CONNECT. Els noms són jdk.http.auth.proxying.disabledSchemes i jdk.http.auth.tunneling.disabledSchemes.
Això explica que el trànsit HTTP s’autentiqui mentre falla un túnel HTTPS pel mateix proxy. Comprova el conf/net.properties de l’entorn d’execució i la política de desplegament, en lloc de suposar que una altra màquina té els mateixos valors efectius per defecte.
Buidar globalment una llista d’esquemes desactivats no és una reparació general de proxys. Les credencials Basic enviades a un proxy HTTP en text clar no estan protegides per la connexió TLS posterior amb la destinació. Revisa el transport del proxy, el mètode d’autenticació i la política de desplegament abans d’aprovar un canvi.
El comportament d’autenticació integrat documentat pel JDK tampoc no promet admetre tots els esquemes anunciats per un proxy. Una capçalera Authorization o Proxy-Authorization proporcionada manualment canvia el flux de l’autenticador automàtic; inspecciona les capçaleres personalitzades si el callback es comporta diferent de l’exemple.