LelouBil / PronoteLib

Java library to get data from a PRONOTE (Index-Education) server.
MIT License
14 stars 4 forks source link

Erreur lors de PronoteConnection.login : java.security.InvalidAlgorithmParameterException #55

Open ClementGre opened 4 years ago

ClementGre commented 4 years ago

Bonjour,

Lorsque j'essaye de run un programme de test qui vise uniquement à appeler PronoteConnection.login pour établir la connexion avec pronote, Gradle me donne l'erreur suivante :

javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
    at java.base/sun.security.ssl.Alerts.getSSLException(Alerts.java:214)
    at java.base/sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1969)
    at java.base/sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1921)
    at java.base/sun.security.ssl.SSLSocketImpl.handleException(SSLSocketImpl.java:1904)
    at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1436)
    at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1413)
    at okhttp3.internal.connection.RealConnection.connectTls(RealConnection.kt:350)
    at okhttp3.internal.connection.RealConnection.establishProtocol(RealConnection.kt:308)
    at okhttp3.internal.connection.RealConnection.connect(RealConnection.kt:182)
    at okhttp3.internal.connection.ExchangeFinder.findConnection(ExchangeFinder.kt:238)
    at okhttp3.internal.connection.ExchangeFinder.findHealthyConnection(ExchangeFinder.kt:111)
    at okhttp3.internal.connection.ExchangeFinder.find(ExchangeFinder.kt:79)
    at okhttp3.internal.connection.Transmitter.newExchange$okhttp(Transmitter.kt:163)
    at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.kt:35)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:112)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:87)
    at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.kt:82)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:112)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:87)
    at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.kt:84)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:112)
    at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.kt:71)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:112)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:87)
    at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.kt:194)
    at okhttp3.RealCall.execute(RealCall.kt:67)
    at net.leloubil.pronotelib.PronoteConnection.initEncryption(PronoteConnection.java:234)
    at net.leloubil.pronotelib.PronoteConnection.login(PronoteConnection.java:137)
    at fr.clementgre.testPronoteLib.main.Main.main(Main.java:11)

J'utilise Java 9 de AdoptOpenJDK et Voici mes versions Gradle :

------------------------------------------------------------
Gradle 6.1.1
------------------------------------------------------------

Build time:   2020-01-24 22:30:24 UTC
Revision:     a8c3750babb99d1894378073499d6716a1a1fa5d

Kotlin:       1.3.61
Groovy:       2.5.8
Ant:          Apache Ant(TM) version 1.10.7 compiled on September 1 2019
JVM:          14.0.1 (AdoptOpenJDK 14.0.1+7)
OS:           Windows 10 10.0 amd64

- Clément G.

ClementGre commented 4 years ago

Lorsque j'essaye de run avec le JDK 11 officiel d'Oracle, j'obtiens une erreur différente :

javax.crypto.BadPaddingException: Given final block not properly padded. Such issues can arise if a bad key is used during decryption.
    at java.base/com.sun.crypto.provider.CipherCore.unpad(CipherCore.java:975)
    at java.base/com.sun.crypto.provider.CipherCore.fillOutputBuffer(CipherCore.java:1056)
    at java.base/com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:853)
    at java.base/com.sun.crypto.provider.AESCipher.engineDoFinal(AESCipher.java:446)
    at java.base/javax.crypto.Cipher.doFinal(Cipher.java:2202)
    at net.leloubil.pronotelib.AuthManager.decryptAes(AuthManager.java:77)
    at net.leloubil.pronotelib.AuthManager.doChallenge(AuthManager.java:93)
    at net.leloubil.pronotelib.PronoteConnection.requestAuth(PronoteConnection.java:159)
    at net.leloubil.pronotelib.PronoteConnection.login(PronoteConnection.java:137)
    at fr.clementgre.testPronoteLib.main.Main.main(Main.java:10)
LelouBil commented 4 years ago

Bonjour, est ce que les tests fonctionnent dans votre environnement ?

ClementGre commented 4 years ago

Bonjour, oui, j'arrive à build et à faire tout les types de tests sans aucun problème. Cette erreur ne survient que lors de la task run de gradle.

PS: j'ai fait une erreur dans le markdown de mon premier message, on ne voyait pas la première ligne de l'erreur, maintenant on la voit.

- Clément

LelouBil commented 4 years ago

Si les tests fonctionnent, je ne suis pas sur de ce que je peut faire, il doit y avoir un problème avec votre serveur Pronote/ vos identifiants ou alors c'est un problème spécifique avec celui ci.

ClementGre commented 4 years ago

Il se pourrait en effet que l'erreur vienne de mon serveur Pronote, mais étant donné que j'obtiens une erreur différente avec en fonction de ma versions Java, je me demande si ça viens de là. L'erreur semble indiquer que le problème viendrait du système de cryptographie de Java. Quel est la version Java avec laquelle a été testé et compilé cette API ?

LelouBil commented 4 years ago

Si les tests fonctionnent avec le JDK 11 et AdoptOpenJDK 9, le probleme ne vient pas de la version de java, l'API est testé avec openJDK 11

Overcraftor commented 4 years ago

Bonjour,

j'ai exactement la même erreur au moment où j'appelle la method "login", j'utilise le JDK 11