Java starpniekservera 407 kļūdas: pārbaudiet CONNECT Basic autentifikāciju
Ierobežojiet Java piekļuves datu izmantošanu ar konkrēto starpniekserveri un pārbaudiet JDK atsevišķo Basic autentifikācijas politiku HTTPS CONNECT tuneļiem.
Atkārtots 407 ne vienmēr nozīmē, ka Java nosūtīja nepareizu paroli. JDK atsauces implementācija parasti atspējo Basic autentifikāciju HTTPS CONNECT tuneļiem. Starpniekserveris, kas piedāvā tikai Basic, var tikt noraidīts, pirms autentifikācijas atzvanfunkcija nodod piekļuves datus.
Ierobežojiet piekļuves datu atzvanfunkcijas darbības jomu
Pievienojiet Authenticator Java HTTP klientam un ierobežojiet to ar konfigurēto starpniekserveri:
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();
Šis ir klienta iestatīšanas kods, nevis globāls noklusējuma autentifikators. Aizstājiet dokumentācijas adresi un izmantojiet šim pakalpojumam patiešām izsniegtus piekļuves datus. Pieprasītāja tipa un galapunkta pārbaudes neļauj šai pašai funkcijai neapdomīgi piedāvāt starpniekservera kontu, atbildot uz vietnes autentifikācijas pieprasījumu.
Pārbaudiet, kurš autentifikācijas posms neizdodas
JDK ir atsevišķi atspējoto autentifikācijas shēmu iestatījumi parastai HTTP starpniekservera izmantošanai un CONNECT tuneļiem. To nosaukumi ir jdk.http.auth.proxying.disabledSchemes un jdk.http.auth.tunneling.disabledSchemes.
Tas izskaidro, kāpēc HTTP datplūsmas autentifikācija var izdoties, bet HTTPS tunelis caur to pašu starpniekserveri neizdodas. Pārbaudiet izpildvides conf/net.properties un izvietošanas politiku, nevis pieņemiet, ka citā datorā darbojas tās pašas noklusējuma vērtības.
Globāli iztukšot atspējoto shēmu sarakstu nav universāls starpniekservera labošanas veids. Basic piekļuves datus, kas nosūtīti nešifrētam HTTP starpniekserverim, neaizsargā vēlāk izveidotais TLS savienojums ar galamērķi. Pirms apstiprināt izmaiņu, izvērtējiet starpniekservera transportu, autentifikācijas metodi un izvietošanas politiku.
Dokumentētā JDK iebūvētās autentifikācijas darbība arī nesola atbalstīt katru shēmu, ko starpniekserveris paziņo. Manuāli pievienota Authorization vai Proxy-Authorization galvene maina automātiskā autentifikatora plūsmu, tāpēc pārbaudiet pielāgotās galvenes, ja atzvanfunkcija darbojas citādi nekā piemērā.