Chyby proxy 407 v Jave: skontrolujte autentifikáciu Basic pre CONNECT
Obmedzte prihlasovacie údaje Javy na proxy a skontrolujte samostatnú politiku JDK pre autentifikáciu Basic v tuneloch HTTPS CONNECT.
Opakovaný 407 nemusí vždy znamenať, že Java odoslala nesprávne heslo. Referenčná implementácia JDK zvyčajne vypína autentifikáciu Basic pre tunely HTTPS CONNECT. Proxy ponúkajúce iba Basic môže byť odmietnuté skôr, než vaše spätné volanie pre autentifikáciu poskytne prihlasovacie údaje.
Obmedzte rozsah spätného volania pre prihlasovacie údaje
Priraďte Authenticator ku klientovi Java HTTP a obmedzte ho na nakonfigurované 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();
Ide o nastavovací kód pre jedného klienta, nie o globálny predvolený autentifikátor. Nahraďte dokumentačnú adresu a použite údaje skutočne poskytnuté pre danú službu. Kontroly typu žiadateľa a koncového bodu zabránia tomu, aby rovnaké spätné volanie neuvážene ponúklo účet proxy pri autentifikačnej výzve webu.
Skontrolujte, ktorá fáza autentifikácie zlyháva
JDK má samostatné nastavenia vypnutých schém pre bežný HTTP prenos cez proxy a pre tunely CONNECT. Príslušné názvy sú jdk.http.auth.proxying.disabledSchemes a jdk.http.auth.tunneling.disabledSchemes.
To vysvetľuje, prečo sa HTTP prevádzka môže autentifikovať, kým HTTPS tunel cez rovnaké proxy zlyhá. Skontrolujte conf/net.properties bežiaceho prostredia a pravidlá nasadenia namiesto predpokladu, že iný počítač má rovnaké účinné predvolené hodnoty.
Globálne vyprázdnenie zoznamu vypnutých schém nie je univerzálnou opravou proxy. Údaje Basic odoslané nešifrovanému HTTP proxy nechráni neskoršie TLS spojenie s cieľom. Pred schválením zmeny posúďte transport k proxy, spôsob autentifikácie a pravidlá nasadenia.
Zdokumentované správanie zabudovanej autentifikácie JDK tiež nesľubuje podporu každej schémy, ktorú proxy inzeruje. Ručne zadaná hlavička Authorization alebo Proxy-Authorization mení priebeh automatického autentifikátora, preto pri odlišnom správaní spätného volania oproti príkladu skontrolujte vlastné hlavičky.