170 votes

Réception d'une alerte fatale : handshake_failure par SSLHandshakeException

J'ai un problème avec la connexion SSL autorisée. J'ai créé une action Struts qui se connecte à un serveur externe avec un certificat SSL autorisé par le client. Dans mon action, j'essaie d'envoyer des données au serveur de la banque, mais sans succès, car j'ai comme résultat de la part du serveur l'erreur suivante :

error: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure

Ma méthode de ma classe Action qui envoie des données au serveur

//Getting external IP from host
    URL whatismyip = new URL("http://automation.whatismyip.com/n09230945.asp");
    BufferedReader inIP = new BufferedReader(new InputStreamReader(whatismyip.openStream()));

    String IPStr = inIP.readLine(); //IP as a String

    Merchant merchant;

    System.out.println("amount: " + amount + ", currency: " + currency + ", clientIp: " + IPStr + ", description: " + description);

    try {

        merchant = new Merchant(context.getRealPath("/") + "merchant.properties");

    } catch (ConfigurationException e) {

        Logger.getLogger(HomeAction.class.getName()).log(Level.INFO, "message", e);
        System.err.println("error: " + e.getMessage());
        return ERROR;
    }

    String result = merchant.sendTransData(amount, currency, IPStr, description);

    System.out.println("result: " + result);

    return SUCCESS;

Mon fichier merchant.properties :

bank.server.url=https://-servernameandport-/
https.cipher=-cipher-

keystore.file=-key-.jks
keystore.type=JKS
keystore.password=-password-
ecomm.server.version=2.0

encoding.source=UTF-8
encoding.native=UTF-8

Pour la première fois, j'ai pensé qu'il s'agissait d'un problème de certificat, j'ai converti le fichier .pfx en .jks, mais j'ai la même erreur, sans aucun changement.

1voto

Rishi Bansal Points 756

Après vérification, j'ai découvert que le problème venait de java 7. Après l'avoir remplacé par java 8, il a commencé à fonctionner. La version ci-dessous est celle qui pose problème.

java -version
java version "1.7.0_101"
Java(TM) SE Runtime Environment (build 1.7.0_101-b61)
Java HotSpot(TM) 64-Bit Server VM (build 24.101-b61, mixed mode)

0voto

user3251882 Points 562

Avertissement : Je ne sais pas si la réponse sera utile à de nombreuses personnes, mais je la partage simplement parce qu'elle pourrait l'être.

J'ai obtenu cette erreur en utilisant Parasoft SOATest pour envoyer une requête XML (SOAP).

Le problème était que j'avais a sélectionné le mauvais alias dans la liste déroulante après avoir ajouté le certificat et l'avoir authentifié.

0voto

ravenskater Points 484

Dans mon cas, j'ai eu un problème avec la version 1.1. J'ai pu reproduire le problème facilement avec curl. Le serveur ne supportait pas les versions inférieures à TLS1.2.

Ce problème de poignée de main a été reçu :

curl --insecure --tlsv1.1 -i https://youhost --noproxy "*"

Avec la version 1.2, cela fonctionnait bien :

curl --insecure --tlsv1.2 -i https://youhost --noproxy "*"

Le serveur fonctionnait sous Weblogic, et l'ajout de cet argument dans setEnvDomain.sh lui a permis de fonctionner avec TLSv1.1 :

-Dweblogic.security.SSL.minimumProtocolVersion=TLSv1.1

0voto

hariom gupta Points 1

Ce problème est dû à la version de Java. J'utilisais le JDK 1.8.0.231 et j'obtenais cette erreur. J'ai dégradé ma version de Java de 1.8.0.231 à 1.8.0.171, et cela fonctionne bien.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X