Errori proxy Java 407: controlla Basic per CONNECT
Limita le credenziali proxy Java al proxy e verifica la politica Basic separata del JDK per i tunnel HTTPS CONNECT.
Un 407 ripetuto non significa sempre che Java abbia inviato la password sbagliata. L’implementazione di riferimento del JDK normalmente disabilita l’autenticazione Basic per i tunnel HTTPS CONNECT. Un proxy che offre solo Basic può essere rifiutato prima che il callback di autenticazione fornisca le credenziali.
Limita l’ambito del callback delle credenziali
Collega un Authenticator al client HTTP Java e limitalo al proxy configurato:
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();
Questo è codice di configurazione di un client, non un autenticatore globale predefinito. Sostituisci l’indirizzo di documentazione e usa credenziali effettivamente fornite per quel servizio. I controlli del tipo di richiedente e dell’endpoint impediscono allo stesso callback di offrire con leggerezza l’account proxy a una richiesta di autenticazione del sito.
Controlla quale fase di autenticazione fallisce
Il JDK ha impostazioni separate degli schemi disabilitati per il proxy HTTP ordinario e i tunnel CONNECT. I nomi sono jdk.http.auth.proxying.disabledSchemes e jdk.http.auth.tunneling.disabledSchemes.
Questo spiega perché il traffico HTTP può autenticarsi mentre un tunnel HTTPS attraverso lo stesso proxy fallisce. Controlla conf/net.properties dell’ambiente di esecuzione e la politica di distribuzione invece di presumere gli stessi valori predefiniti effettivi su un’altra macchina.
Svuotare globalmente l’elenco degli schemi disabilitati non è una riparazione generale del proxy. Le credenziali Basic inviate a un proxy HTTP in chiaro non sono protette dalla successiva connessione TLS alla destinazione. Esamina il trasporto del proxy, il metodo di autenticazione e la politica di distribuzione prima di approvare una modifica.
Il comportamento di autenticazione integrato documentato dal JDK non promette neppure il supporto di ogni schema pubblicizzato da un proxy. Un’intestazione Authorization o Proxy-Authorization fornita manualmente cambia il flusso dell’autenticatore automatico: controlla le intestazioni personalizzate se il callback si comporta diversamente dall’esempio.