Давтагдах 407 нь заавал Java буруу нууц үг илгээсэн гэсэн үг биш. JDK-ийн жишиг хэрэгжүүлэлт HTTPS CONNECT хонгилд Basic баталгаажуулалтыг ихэвчлэн идэвхгүй болгодог. Зөвхөн Basic санал болгодог прокси таны баталгаажуулалтын callback нэвтрэх мэдээлэл өгөхөөс өмнө татгалзагдаж болно.

Нэвтрэх мэдээлэл өгөх callback-ийн хүрээг хязгаарла

Java HTTP клиентэд Authenticator холбоод тохируулсан проксигоор хязгаарла:

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

Энэ нь нэг клиентийн тохиргооны код бөгөөд глобал анхдагч баталгаажуулагч биш. Баримт бичгийн хаягийг сольж, тухайн үйлчилгээнд үнэхээр олгосон нэвтрэх мэдээлэл ашигла. Хүсэлт гаргагчийн төрөл болон төгсгөлийн цэгийг шалгаснаар ижил callback вэбсайтын баталгаажуулах шаардлагад проксийн бүртгэлийг бодлогогүйгээр өгөхөөс сэргийлнэ.

Баталгаажуулалтын аль шат бүтэлгүйтэж байгааг шалга

JDK нь энгийн HTTP прокси дамжуулалт болон CONNECT хонгилд идэвхгүй болгосон схемийн тусдаа тохиргоотой. Холбогдох нэрс нь jdk.http.auth.proxying.disabledSchemes болон jdk.http.auth.tunneling.disabledSchemes юм.

Тиймээс HTTP урсгалын баталгаажуулалт амжилттай байхад ижил проксигоор HTTPS хонгил бүтэлгүйтэж болно. Өөр компьютерт ижил хүчинтэй анхдагч утга байгаа гэж таахын оронд ажиллах орчны conf/net.properties болон нэвтрүүлэх бодлогыг шалга.

Идэвхгүй схемийн жагсаалтыг глобалаар хоослох нь проксийг засах ерөнхий арга биш. Шифрлээгүй HTTP проксид илгээсэн Basic нэвтрэх мэдээллийг зорилтот сервертэй хожим үүсэх TLS холболт хамгаалахгүй. Өөрчлөлт зөвшөөрөхөөс өмнө проксийн тээвэрлэлтийг, баталгаажуулах арга болон нэвтрүүлэх бодлогыг нягтал.

JDK-ийн суурилагдсан баталгаажуулалтын баримтжуулсан ажиллагаа нь проксийн зарласан бүх схемийг дэмжих амлалт мөн биш. Гараар өгсөн Authorization эсвэл Proxy-Authorization толгой автомат баталгаажуулагчийн урсгалыг өөрчилдөг тул callback жишээнээс өөрөөр ажиллавал тусгай толгойнуудыг шалга.

Холбоотой нийтлэлүүд