Erros 407 de proxy en Java: comproba Basic para CONNECT
Limita as credenciais do proxy Java ao proxy e revisa a política Basic independente do JDK para túneles HTTPS CONNECT.
Un 407 repetido non sempre significa que Java enviou un contrasinal incorrecto. A implementación de referencia do JDK normalmente desactiva a autenticación Basic para túneles HTTPS CONNECT. Un proxy que só ofrece Basic pode rexeitarse antes de que o callback de autenticación proporcione credenciais.
Limita o alcance do callback de credenciais
Asocia un Authenticator ao cliente HTTP de Java e limítao ao proxy configurado:
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();
Este código configura un cliente, non un autenticador global predeterminado. Substitúe o enderezo de documentación e usa credenciais realmente proporcionadas para ese servizo. As comprobacións do tipo de solicitante e do punto de conexión evitan que o mesmo callback ofreza sen máis a conta do proxy ante unha petición de autenticación dun sitio web.
Comproba que etapa de autenticación falla
O JDK ten axustes de esquemas desactivados separados para o proxy HTTP normal e os túneles CONNECT. Os nomes son jdk.http.auth.proxying.disabledSchemes e jdk.http.auth.tunneling.disabledSchemes.
Isto explica que o tráfico HTTP poida autenticarse mentres falla un túnel HTTPS polo mesmo proxy. Revisa conf/net.properties do contorno de execución e a política de despregamento en vez de supoñer os mesmos valores efectivos predeterminados noutro ordenador.
Baleirar globalmente unha lista de esquemas desactivados non é unha reparación xeral de proxys. As credenciais Basic enviadas a un proxy HTTP en texto claro non quedan protexidas pola conexión TLS posterior co destino. Revisa o transporte do proxy, o método de autenticación e a política de despregamento antes de aprobar un cambio.
O comportamento de autenticación integrado documentado polo JDK tampouco promete admitir todos os esquemas anunciados por un proxy. Unha cabeceira Authorization ou Proxy-Authorization engadida manualmente cambia o fluxo do autenticador automático; revisa as cabeceiras personalizadas se o callback se comporta distinto do exemplo.