Az ismételt 407 nem mindig jelenti, hogy a Java hibás jelszót küldött. A JDK referencia-megvalósítása rendszerint letiltja a Basic-hitelesítést HTTPS CONNECT-alagutakhoz. A csak Basicet kínáló proxy elutasítható még azelőtt, hogy a hitelesítési callback átadná az adatokat.

Korlátozza a hitelesítőadat-callback hatókörét

Csatoljon Authenticatort a Java HTTP-klienshez, és korlátozza a beállított proxyra:

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();

Ez egy kliens beállítókódja, nem globális alapértelmezett hitelesítő. Cserélje a dokumentációs címet, és ténylegesen az adott szolgáltatáshoz kiadott adatokat használja. A kérelmezőtípus és végpont ellenőrzése megakadályozza, hogy ugyanaz a callback könnyelműen felajánlja a proxyfiókot egy webhely hitelesítési felszólítására.

Ellenőrizze, melyik hitelesítési szakasz hibázik

A JDK külön letiltott-séma beállításokat használ a szokásos HTTP-proxyzáshoz és a CONNECT-alagutakhoz. A nevek jdk.http.auth.proxying.disabledSchemes és jdk.http.auth.tunneling.disabledSchemes.

Ezért sikerülhet a HTTP-forgalom hitelesítése, miközben a HTTPS-alagút ugyanazon proxyn hibázik. A futtatókörnyezet conf/net.properties fájlját és a telepítési szabályzatot ellenőrizze ahelyett, hogy másik gépen is ugyanazokat a tényleges alapértékeket feltételezné.

A letiltott sémák listájának globális ürítése nem általános proxyjavítás. A titkosítatlan HTTP-proxynak küldött Basic-adatokat nem védi a céllal később létrejövő TLS-kapcsolat. Változtatás jóváhagyása előtt vizsgálja a proxy átviteli módját, a hitelesítési módszert és a telepítési szabályzatot.

A JDK dokumentált beépített hitelesítési viselkedése sem ígéret a proxy által hirdetett összes séma támogatására. A kézzel megadott Authorization vagy Proxy-Authorization fejléc megváltoztatja az automatikus hitelesítő folyamatát, ezért ellenőrizze a saját fejléceket, ha a callback másként működik, mint a példában.

Kapcsolódó cikkek