Java прокси грешке 407: проверите Basic аутентификацију за CONNECT
Ограничите Java акредитиве на прокси и проверите посебну JDK политику за Basic аутентификацију у HTTPS CONNECT тунелима.
Понављани 407 не значи увек да је Java послала погрешну лозинку. Референтна имплементација JDK-а обично онемогућава Basic аутентификацију за HTTPS CONNECT тунеле. Прокси који нуди само Basic може бити одбијен пре него што повратни позив за аутентификацију достави акредитиве.
Ограничите домет повратног позива за акредитиве
Придружите Authenticator Java HTTP клијенту и ограничите га на подешени прокси:
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();
Ово је код за подешавање једног клијента, а не глобални подразумевани аутентификатор. Замените документациону адресу и користите акредитиве који су заиста додељени за ту услугу. Провере типа тражиоца и крајње тачке спречавају да исти повратни позив непромишљено понуди прокси налог на захтев веб-сајта за аутентификацију.
Проверите која фаза аутентификације не успева
JDK има одвојене поставке онемогућених шема за обичан HTTP саобраћај преко проксија и за CONNECT тунеле. Одговарајући називи су jdk.http.auth.proxying.disabledSchemes и jdk.http.auth.tunneling.disabledSchemes.
То објашњава зашто аутентификација HTTP саобраћаја може успети док HTTPS тунел преко истог проксија не успева. Проверите conf/net.properties извршног окружења и политику постављања, уместо да претпостављате исте ефективне подразумеване вредности на другој машини.
Глобално пражњење листе онемогућених шема није опште решење за прокси. Basic акредитиве послате нешифрованом HTTP проксију не штити каснија TLS веза са одредиштем. Пре одобравања измене размотрите транспорт до проксија, метод аутентификације и политику постављања.
Документовано понашање уграђене JDK аутентификације такође не обећава подршку за сваку шему коју прокси оглашава. Ручно задато заглавље Authorization или Proxy-Authorization мења ток аутоматског аутентификатора, па проверите прилагођена заглавља када се повратни позив понаша другачије него у примеру.