Minecraft sous Linux - problème de proxy https

tchabra

Aventurier
27 Janvier 2015
5
0
1
54
Bonjour,

J'ai acheté et installé mineraft pour mon fils sur un PC Debian jessie. Son compte est protégé par un contrôle parental que je ne souhaite pas désactiver. Après quelques recherches, j'ai fini par trouver la ligne de commande suivante:
Code:
$ java -Dhttp.proxyHost=localhost -Dhttp.proxyPort=3128 -Dhttps.proxyHost=localhost -Dhttps.proxyPort=3128 -jar Minecraft.jar

Mais ça ne marche qu'à moitié car il n'arrive pas à charger le fichier https://s3.amazonaws.com/Minecraft.Download/launcher/launcher.pack.lzma, et la console rapporte deux traces d'exceptions :
Code:
[00:41:57 ERROR]: Unexpected exception refreshing version list
java.net.SocketTimeoutException: connect timed out
    at java.net.PlainSocketImpl.socketConnect(Native Method) ~[?:1.7.0_65]
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) ~[?:1.7.0_65]
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) ~[?:1.7.0_65]
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) ~[?:1.7.0_65]
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[?:1.7.0_65]
    at java.net.Socket.connect(Socket.java:579) ~[?:1.7.0_65]
    at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:618) ~[?:1.7.0_65]
    at sun.net.NetworkClient.doConnect(NetworkClient.java:175) ~[?:1.7.0_65]
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:432) ~[?:1.7.0_65]
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:527) ~[?:1.7.0_65]
    at sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:275) ~[?:1.7.0_65]
    at sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:371) ~[?:1.7.0_65]
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:191) ~[?:1.7.0_65]
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:975) ~[?:1.7.0_65]
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:177) ~[?:1.7.0_65]
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1300) ~[?:1.7.0_65]
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254) ~[?:1.7.0_65]
    at com.mojang.launcher.Http.performGet(Http.java:54) ~[launcher.jar:?]
    at net.minecraft.launcher.updater.RemoteVersionList.getContent(RemoteVersionList.java:27) ~[launcher.jar:?]
    at net.minecraft.launcher.updater.VersionList.refreshVersions(VersionList.java:85) ~[launcher.jar:?]
    at net.minecraft.launcher.updater.MinecraftVersionManager.refreshVersions(MinecraftVersionManager.java:60) ~[launcher.jar:?]
    at net.minecraft.launcher.Launcher$2.run(Launcher.java:131) [launcher.jar:?]
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) [?:1.7.0_65]
    at java.util.concurrent.FutureTask.run(FutureTask.java:262) [?:1.7.0_65]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [?:1.7.0_65]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [?:1.7.0_65]
    at java.lang.Thread.run(Thread.java:745) [?:1.7.0_65]
[00:41:57 INFO]: Loaded 1 profile(s); selected '(Default)'
[00:41:57 INFO]: Refreshing auth...
[00:41:57 INFO]: Logging in with access token
Exception: java.net.SocketTimeoutException: connect timed out
Downloading: https://s3.amazonaws.com/Minecraft.Download/launcher/launcher.pack.lzma (try 3/10)
[00:42:28 ERROR]: Exception whilst logging into profile
com.mojang.authlib.exceptions.AuthenticationUnavailableException: Cannot contact authentication server
    at com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService.makeRequest(YggdrasilAuthenticationService.java:71) ~[launcher.jar:?]
    at com.mojang.authlib.yggdrasil.YggdrasilUserAuthentication.logInWithToken(YggdrasilUserAuthentication.java:132) ~[launcher.jar:?]
    at com.mojang.authlib.yggdrasil.YggdrasilUserAuthentication.logIn(YggdrasilUserAuthentication.java:55) ~[launcher.jar:?]
    at net.minecraft.launcher.Launcher.ensureLoggedIn(Launcher.java:213) [launcher.jar:?]
    at net.minecraft.launcher.Launcher$2.run(Launcher.java:167) [launcher.jar:?]
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) [?:1.7.0_65]
    at java.util.concurrent.FutureTask.run(FutureTask.java:262) [?:1.7.0_65]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [?:1.7.0_65]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [?:1.7.0_65]
    at java.lang.Thread.run(Thread.java:745) [?:1.7.0_65]
Caused by: java.net.SocketTimeoutException: connect timed out
    at java.net.PlainSocketImpl.socketConnect(Native Method) ~[?:1.7.0_65]
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) ~[?:1.7.0_65]
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) ~[?:1.7.0_65]
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) ~[?:1.7.0_65]
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[?:1.7.0_65]
    at java.net.Socket.connect(Socket.java:579) ~[?:1.7.0_65]
    at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:618) ~[?:1.7.0_65]
    at sun.net.NetworkClient.doConnect(NetworkClient.java:175) ~[?:1.7.0_65]
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:432) ~[?:1.7.0_65]
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:527) ~[?:1.7.0_65]
    at sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:275) ~[?:1.7.0_65]
    at sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:371) ~[?:1.7.0_65]
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:191) ~[?:1.7.0_65]
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:975) ~[?:1.7.0_65]
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:177) ~[?:1.7.0_65]
    at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1091) ~[?:1.7.0_65]
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:250) ~[?:1.7.0_65]
    at com.mojang.authlib.HttpAuthenticationService.performPostRequest(HttpAuthenticationService.java:73) ~[launcher.jar:?]
    at com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService.makeRequest(YggdrasilAuthenticationService.java:54) ~[launcher.jar:?]
    ... 9 more
Pourtant, je n'ai aucun souci pour récupérer https://s3.amazonaws.com/Minecraft.Download/launcher/launcher.pack.lzma avec l'utilitaire wget avec le proxy configuré de la même façon :
Code:
$ env | grep -i proxy
NO_PROXY=localhost,127.0.0.1
http_proxy=http://localhost:3128/
FTP_PROXY=http://localhost:3128/
ftp_proxy=http://localhost:3128/
HTTPS_PROXY=http://localhost:3128/
https_proxy=http://localhost:3128/
no_proxy=localhost,127.0.0.1
HTTP_PROXY=http://localhost:3128/
$ wget -c https://s3.amazonaws.com/Minecraft.Download/launcher/launcher.pack.lzma
--2015-01-27 00:56:10--  https://s3.amazonaws.com/Minecraft.Download/launcher/launcher.pack.lzma
Résolution de localhost (localhost)… 127.0.0.1
Connexion à localhost (localhost)|127.0.0.1|:3128… connecté.
requête Proxy transmise, en attente de la réponse… 200 OK
Taille : 1094123 (1,0M) [application/octet-stream]
Sauvegarde en : « launcher.pack.lzma »
 
launcher.pack.lzma                    100%[=========================================================================>]  1,04M  471KB/s  ds 2,3s 
 
2015-01-27 00:56:13 (471 KB/s) — « launcher.pack.lzma » sauvegardé [1094123/1094123]
Est-ce qu'il y aurait quelque part une doc qui définit explicitement les paramètres pour passer un proxy ainsi que la liste des éventuels ports à ouvrir ?

Merci par avance.
 

tchabra

Aventurier
27 Janvier 2015
5
0
1
54
J'ajoute que j'ai testé depuis mon compte sur la même machine mais sans contrôle parental, et là le jeu semble se lancer correctement. C'est donc bien lié au contrôle parental et à sa configuration.
 

robin4002

Expert en informatique et systèmes d'information
Staff
Responsable technique
Responsable forum
12 Novembre 2012
20 817
156
3 000
347
26
Alsace
www.minecraftforgefrance.fr
Bonsoir,
Il suffit de faire un petit :
java -jar Minecraft.jar --help
Et on obtient :
Code:
C:\Users\Robin\Documents\Minecraft>java -jar Minecraft.exe --help
Option                Description
------                -----------
--force                Force updating
--help                Show help
--proxyHost            Optional
--proxyPass            Optional
--proxyPort <Integer>  Optional (default: 8080)
--proxyUser            Optional
--workDir <File>      Optional (default: C:
                        \Users\Robin\AppData\Roaming\.minecraft)
Je ne sais pas pourquoi Minecraft ignore complètement le proxy système (que ce soit sous Linux ou Windows)
En revanche comme vous pouvez le voir on peut spécifier le proxy dans les arguments de lancement.

Ceci devrait normalement fonctionner :
Code:
java -jar Minecraft.jar --proxyHost localhost --proxyPort 3128
 

tchabra

Aventurier
27 Janvier 2015
5
0
1
54
Ceci devrait normalement fonctionner :
Code:
java -jar Minecraft.jar --proxyHost localhost --proxyPort 3128
Rhâ, ça semblait prometteur, mais malheureusement ça ne passe pas. Il y a cependant une subtile différence au niveau de la callstack:
Code:
Exception: java.net.SocketTimeoutException: Connect timed out
Downloading: https://s3.amazonaws.com/Minecraft.Download/launcher/launcher.pack.lzma (try 2/10)
[22:39:13 ERROR]: Unexpected exception refreshing version list
java.net.SocketTimeoutException: Connect timed out
    at java.net.SocksSocketImpl.readSocksReply(SocksSocketImpl.java:127) ~[?:1.7.0_65]
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:460) ~[?:1.7.0_65]
    at java.net.Socket.connect(Socket.java:579) ~[?:1.7.0_65]
    at sun.net.NetworkClient.doConnect(NetworkClient.java:175) ~[?:1.7.0_65]
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:432) ~[?:1.7.0_65]
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:527) ~[?:1.7.0_65]
Ça plante sur SocksSocketImpl.readSocksReply alors qu'avant ça plantait sur socket.connect. Serait-ce parce qu'il attend obligatoirement un proxy de type SOCKS ? Le mien est un squid assez standard...
 

robin4002

Expert en informatique et systèmes d'information
Staff
Responsable technique
Responsable forum
12 Novembre 2012
20 817
156
3 000
347
26
Alsace
www.minecraftforgefrance.fr
Désolé mais je ne sais rien de plus que ça :/
Sinon si le problème est bien dû au fait que Minecraft a besoin d'un proxy SOCKS, il n'y aurait pas moyen de passer par un autre logiciel qui supporte SOCKS ?
 

tchabra

Aventurier
27 Janvier 2015
5
0
1
54
Bon, je viens d'avoir confirmation sur IRC que les options --proxyHost et --proxyPort ne marchent que pour un proxy SOCKS :(
C'est un peu marteau pilon, mais pour ne pas casser ma configuration de contrôle parental, je vais tenter d'installer un proxy SOCKS hyper simple qui se contente de solliciter le proxy HTTP, en espérant que ça suffise. Je posterai le résultat ici.
 

tchabra

Aventurier
27 Janvier 2015
5
0
1
54
\o/ trouvé !
Il suffit d'utiliser proxychains avec cette configuration :
Code:
$ cat ~/.proxychains/proxychains.conf
strict_chain
tcp_read_time_out 15000
tcp_connect_time_out 8000
[ProxyList]
http 127.0.0.1 3128
Puis de lancer minecraft de cette façon :
Code:
$ proxychains java -jar Minecraft.jar
En espérant que ce soit utile à d'autres qui galèrent derrière un proxy HTTP.