Depuis Java 8 Update 111, il semble que le paramètre par défaut est que l'authentification de base ne peut pas être utilisée pour le tunneling lors de la connexion à HTTPS dans le package java.net
.
Il semble qu'il soit nécessaire de définir une chaîne de caractères vide dans jdk.http.auth.tunneling.disabledSchemes
pour l'éviter.
Lorsque vous essayez d'accéder au site https depuis l'environnement à l'intérieur du proxy authentifié à l'aide de Java java.net.HttpURLConnection
, l'erreur 407 Proxy Authentication Required
se produit quelle que soit la manière dont les informations d'authentification du proxy sont données. Impossible de résoudre.
Sample.java
import java.util.*;
import java.net.*;
public class Sample {
private static String PROXY_HOST = "example.proxy.com";
private static String PROXY_PORT = "8080";
private static String PROXY_USER = "user";
private static String PROXY_PASSWORD = "password";
public static void main(String[] args) throws Exception {
String url = "https://news.google.com";
System.setProperty("proxySet", "true");
System.setProperty("proxyHost", PROXY_HOST);
System.setProperty("proxyPort", PROXY_PORT);
Authenticator.setDefault(new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(PROXY_USER, PROXY_PASSWORD.toCharArray());
}
});
HttpURLConnection urlconn = (HttpURLConnection) new URL(url).openConnection();
urlconn.setRequestMethod("GET");
urlconn.connect();
}
}
Lorsque j'exécute le code Java ci-dessus, j'obtiens l'erreur suivante:
$ java Sample
Exception in thread "main" java.io.IOException: Unable to tunnel through proxy. Proxy returns "HTTP/1.1 407 Proxy Authentication Required"
at sun.net.www.protocol.http.HttpURLConnection.doTunneling(HttpURLConnection.java:2124)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:183)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:153)
at Sample.main(Sample.java:25)
J'ai essayé ce qui suit ainsi que les paramètres de proxy d'authentification dans le code, mais le résultat est le même.
java -Dhttp.proxyHost =" example.proxy.com "-Dhttp.proxyPort = 8080 -Dhttp.proxyUser = utilisateur -Dhttp.proxyPassword = mot de passe (même paramètre pour https) Exemple
java -Djava.net.useSystemProxies = true Sample
Le système d'exploitation est Ubuntu 16.04 et la version Java est la suivante.
$ java -version
java version "1.8.0_111"
Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)
À partir de 8u111 publié en octobre 2016, l'authentification de base ne peut plus être utilisée pour le tunneling lors de la connexion via HTTPS comme paramètre par défaut.
Modifications de la version Java 8 (https://www.java.com/en/download/faq/release_changes.xml)
Désactiver l'authentification de base pour le tunnel HTTPS Dans certains environnements, certains schémas d'authentification peuvent être inappropriés lors du proxy HTTPS. Par conséquent, le schéma d'authentification de base est désactivé par défaut dans Oracle Java Runtime en ajoutant Basic à la propriété réseau jdk.http.auth.tunneling.disabledSchemes. Les proxy qui nécessitent une authentification de base lors de la configuration des tunnels HTTPS ne réussiront plus par défaut. Si nécessaire, réactivez ce schéma d'authentification en supprimant Basic de la propriété réseau jdk.http.auth.tunneling.disabledSchemes ou en définissant la propriété système du même nom sur "" (vide) sur la ligne de commande. Peut être converti. En outre, les propriétés système portant les mêmes noms que les propriétés réseau jdk.http.auth.tunneling.disabledSchemes et jdk.http.auth.proxying.disabledSchemes sont activées lors de la configuration du tunnel HTTPS ou lors du proxy HTTP, respectivement. Il peut être utilisé pour invalider d'autres schémas d'authentification qui auraient pu l'être. JDK-8160838 (privé)
Si vous regardez la version anglaise de la note de publication, il est dit «core-libs / java.net». , Cela semble être un changement dans le comportement par défaut lors de la connexion à HTTPS en utilisant la fonctionnalité des classes dans le package java.net
.
jdk.http.auth.tunneling.disabledSchemes =" "
.java -Djdk.http.auth.tunneling.disabledSchemes =" "Sample
System.setProperty (" jdk.http.auth.tunneling.disabledSchemes "," ");
J'ai essayé sysout System.getProperty (" jdk.http.auth.tunneling.disabledSchemes ")
et le résultat était null
.
Recommended Posts