Bug de configuration du serveur stunnel: `SSL3_GET_CLIENT_HELLO: numéro de version incorrect`

9

J'installe un stunnelserveur sur Windows XP et j'obtiens ce bogue lorsqu'un client essaie d'accéder:

2013.02.14 00:02:16 LOG7[8848:7664]: Service [https] accepted (FD=320) from 107.20.36.147:56160
2013.02.14 00:02:16 LOG7[8848:7664]: Creating a new thread
2013.02.14 00:02:16 LOG7[8848:7664]: New thread created
2013.02.14 00:02:16 LOG7[8848:9792]: Service [https] started
2013.02.14 00:02:16 LOG5[8848:9792]: Service [https] accepted connection from 107.20.36.147:56160
2013.02.14 00:02:16 LOG7[8848:9792]: SSL state (accept): before/accept initialization
2013.02.14 00:02:16 LOG7[8848:9792]: SSL alert (write): fatal: handshake failure
2013.02.14 00:02:16 LOG3[8848:9792]: SSL_accept: 1408A10B: error:1408A10B:SSL routines:SSL3_GET_CLIENT_HELLO:wrong version number
2013.02.14 00:02:16 LOG5[8848:9792]: Connection reset: 0 byte(s) sent to SSL, 0 byte(s) sent to socket
2013.02.14 00:02:16 LOG7[8848:9792]: Local socket (FD=320) closed
2013.02.14 00:02:16 LOG7[8848:9792]: Service [https] finished (0 left)

Une idée de quoi faire à ce sujet? J'ai lu en ligne que cela pouvait signifier que mon serveur annonçait qu'il pouvait communiquer en SSL3 mais qu'il ne le pouvait pas. Si c'est vrai, j'aimerais savoir comment résoudre ce problème. J'édite le stunnel.conffichier mais je n'ai aucune idée de ce qu'il faut changer pour y remédier.

MISE À JOUR:

Le message d'erreur ci-dessus s'affiche uniquement lorsque le client Twilio (c'est-à-dire le serveur de Twilio) tente d'accéder à mon serveur. Lorsque j'essaie d'accéder à mon serveur avec l'un de mes ordinateurs, la page s'affiche, mais une fois le contenu affiché, Chrome affiche la page en "chargement" pendant environ 30 secondes, ce qui stunneldonne à la fin ce message:

transfer: s_poll_wait: TIMEOUTclose exceeded: closing

MISE À JOUR:

Voici la capture de Wheelshark: https://gist.github.com/cool-RR/4963477

Fichier de cap: https://dl.dropbox.com/u/1927707/wireshark.cap

Notez que le serveur s'exécute sur le port 8088.

MISE À JOUR:

Voici le journal du serveur (avec debug = 7):

2013.02.17 17:06:52 LOG7[7636:2092]: No limit detected for the number of clients
2013.02.17 17:06:52 LOG5[7636:2092]: stunnel 4.54 on x86-pc-msvc-1500 platform
2013.02.17 17:06:52 LOG5[7636:2092]: Compiled/running with OpenSSL 1.0.1c-fips 10 May 2012
2013.02.17 17:06:52 LOG5[7636:2092]: Threading:WIN32 SSL:+ENGINE+OCSP+FIPS Auth:none Sockets:SELECT+IPv6
2013.02.17 17:06:52 LOG5[7636:2092]: Reading configuration from file stunnel.conf
2013.02.17 17:06:52 LOG5[7636:2092]: FIPS mode is enabled
2013.02.17 17:06:52 LOG7[7636:2092]: Compression not enabled
2013.02.17 17:06:52 LOG7[7636:2092]: Snagged 64 random bytes from C:\Documents and Settings\User/.rnd
2013.02.17 17:06:52 LOG7[7636:2092]: Wrote 1024 new random bytes to C:\Documents and Settings\User/.rnd
2013.02.17 17:06:52 LOG7[7636:2092]: PRNG seeded successfully
2013.02.17 17:06:52 LOG6[7636:2092]: Initializing service [https]
2013.02.17 17:06:52 LOG7[7636:2092]: Certificate: G:\Dropbox\StartSSL\SSL Cert.pem
2013.02.17 17:06:52 LOG7[7636:2092]: Certificate loaded
2013.02.17 17:06:52 LOG7[7636:2092]: Key file: G:\Dropbox\StartSSL\SSL Cert.pem
2013.02.17 17:06:52 LOG7[7636:2092]: Private key loaded
2013.02.17 17:06:52 LOG7[7636:2092]: Could not load DH parameters from G:\Dropbox\StartSSL\SSL Cert.pem
2013.02.17 17:06:52 LOG7[7636:2092]: Using hardcoded DH parameters
2013.02.17 17:06:52 LOG7[7636:2092]: DH initialized with 2048-bit key
2013.02.17 17:06:52 LOG7[7636:2092]: ECDH initialized with curve prime256v1
2013.02.17 17:06:52 LOG7[7636:2092]: SSL options set: 0x03000004
2013.02.17 17:06:52 LOG5[7636:2092]: Configuration successful
2013.02.17 17:06:52 LOG7[7636:2092]: Service [https] (FD=268) bound to 0.0.0.0:8088
2013.02.17 17:07:08 LOG7[7636:2092]: Service [https] accepted (FD=320) from 54.242.25.199:45922
2013.02.17 17:07:08 LOG7[7636:2092]: Creating a new thread
2013.02.17 17:07:08 LOG7[7636:2092]: New thread created
2013.02.17 17:07:08 LOG7[7636:8004]: Service [https] started
2013.02.17 17:07:08 LOG5[7636:8004]: Service [https] accepted connection from 54.242.25.199:45922
2013.02.17 17:07:08 LOG7[7636:8004]: SSL state (accept): before/accept initialization
2013.02.17 17:07:08 LOG7[7636:8004]: SSL alert (write): fatal: handshake failure
2013.02.17 17:07:08 LOG3[7636:8004]: SSL_accept: 1408A10B: error:1408A10B:SSL routines:SSL3_GET_CLIENT_HELLO:wrong version number
2013.02.17 17:07:08 LOG5[7636:8004]: Connection reset: 0 byte(s) sent to SSL, 0 byte(s) sent to socket
2013.02.17 17:07:08 LOG7[7636:8004]: Local socket (FD=320) closed
2013.02.17 17:07:08 LOG7[7636:8004]: Service [https] finished (0 left)

MISE À JOUR:

Voici mon stunnel.confdossier.

Ram Rachum
la source
Le fichier dropbox semble manquant. Le serveur retourne HTTP / 404
Mircea Vutcovici
@MirceaVutcovici Désolé, corrigé maintenant.
Ram Rachum
J'ai augmenté la prime sur la question à 100 points.
Ram Rachum
1
Pourriez-vous également inclure le fichier stunnel.conf? Parce qu'il semble que votre serveur refuse les connexions SSLv3.0
Stephane
Inclus maintenant
Ram Rachum

Réponses:

3

Vous devez effectuer une capture réseau et voir pourquoi elle a été rejetée. Vérifiez également les journaux sur les deux points de terminaison. Augmentez le debugniveau dans la conf stunnel.

Vous devez créer une trace réseau pour déterminer la version du protocole SSL prise en charge par le client. Assurez-vous ensuite que votre serveur prend également en charge cette version.

Un client envoie un message ClientHello spécifiant la version de protocole TLS la plus élevée qu'il prend en charge, un nombre aléatoire, une liste de CipherSuites suggérées et des méthodes de compression suggérées.

La source

Veuillez noter que le protocole SSL a été modifié il y a quelques années en raison d'un bogue de sécurité lors de la renégociation. Voir CVE-2009-3555 et cette page sur la renégociation SSL

Le serveur répond avec:

Secure Sockets Layer
    SSLv3 Record Layer: Alert (Level: Fatal, Description: Handshake Failure)
        Content Type: Alert (21)
        Version: SSL 3.0 (0x0300)
        Length: 2
        Alert Message
            Level: Fatal (2)
            Description: Handshake Failure (40)

Vous devez vérifier les journaux sur le serveur SSL pour voir pourquoi il a refusé la connexion. Essayez d'activer le débogage SSL sur stunnel avec: debug=7.

Le stunnelserveur l'a fait options = NO_SSLv3, mais le client tente de se connecter à l'aide de SSLv3. Vous devez mettre à niveau le client pour prendre en charge une version plus récente de SSL ou vous devez modifier la stunnelconfiguration pour accepter SSLv3.

Mircea Vutcovici
la source
J'ai mis à jour la question avec plus de détails. Avez-vous encore besoin de moi pour effectuer une capture réseau?
Ram Rachum
Oui, pour savoir quelle version est prise en charge par le client SSL.
Mircea Vutcovici
J'ai fait une capture de Wireshark et je l'ai lié à la question.
Ram Rachum
1
Ok, le problème est que le mode FIPS est activé (il est activé par défaut dans Stunnel compilé avec FIPS) et que le client essaie de se connecter à l'aide de SSLv3 (je suppose que vous devez confirmer à partir des journaux ou de la capture réseau). Mais FIPS ne fonctionne qu'avec TLSv1 ou plus récent.
Mircea Vutcovici
1
Vous avez 2 solutions: 1. mettez à niveau le client SSL (Twilio). 2. désactivez la conformité FIPS et fips = noréduisez la sécurité en ajoutant à stunnel.conf
Mircea Vutcovici
0

Il peut s'agir d'une incompatibilité de version SSL entre le client et le serveur. Assurez-vous que le client est configuré pour SSL3 uniquement, en désactivant les anciennes versions SSL sur le client.

Daniel t.
la source
Je ne sais pas comment faire ça.
Ram Rachum