IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Déploiement/Installation Python Discussion :

Utiliser SSLv3 avec la bibliothèque ssl en python 2.7


Sujet :

Déploiement/Installation Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 10
    Par défaut Utiliser SSLv3 avec la bibliothèque ssl en python 2.7
    Bonjour, je cherche à faire un programme en python 2.7 (en utilisant uniquement des bibliothèque de la librairie standard) afin de déterminer les versions de SSL/TLS supportés par un site web.

    Voici mon code (en mode un peu brouillon). Pour des soucis de clarté, je teste uniquement le cipher suite RC4-SHA ici

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
     
        #encoding=utf-8
     
        import ssl
        import socket
        import traceback
        import logging
        import sys
        import json
     
        class AnalyseSSL:
     
        cipher_list="RC4-SHA".split(":")    
     
     
     
        list_version_ssl_tls = [
        ("SSLv2", ssl.OP_ALL | ssl.OP_NO_SSLv3 | ssl.OP_NO_TLSv1 | ssl.OP_NO_TLSv1_1 | ssl.OP_NO_TLSv1_2),
        ("SSLv3", ssl.OP_ALL | ssl.OP_NO_SSLv2 | ssl.OP_NO_TLSv1 | ssl.OP_NO_TLSv1_1 | ssl.OP_NO_TLSv1_2),
        ("TLSv1", ssl.OP_ALL | ssl.OP_NO_SSLv2 | ssl.OP_NO_SSLv3 | ssl.OP_NO_TLSv1_1 | ssl.OP_NO_TLSv1_2),
        ("TLSv1_1", ssl.OP_ALL | ssl.OP_NO_SSLv2 | ssl.OP_NO_SSLv3 | ssl.OP_NO_TLSv1 | ssl.OP_NO_TLSv1_2),
        ("TLSv1_2", ssl.OP_ALL | ssl.OP_NO_SSLv2 | ssl.OP_NO_SSLv3 | ssl.OP_NO_TLSv1 | ssl.OP_NO_TLSv1_1),
    ]
     
     
     
     
     
    def __init__(self, hostname, port):
        self.hostname = hostname
        self.port = port
     
     
    # try to connect to the hostname with all cipher suite for each SSL/TLS version
    def try_all_ssl_tls_version(self):
        logging.warning("---------------------------------------- %s", port)
        nb_tentative_max = 5
        cpt_tentative_max = 0
        resultat = {}
     
        try:
        print 'hostname : ', hostname
        for version in self.list_version_ssl_tls:                                           # Pour chaque version de SSL/TLS
            cpt_nb_tentative_max = 0
            is_version_supported = False
            if cpt_tentative_max >= 5:
                    break;
            for cipher_suite in self.cipher_list:                                                # Pour chaque cipher suite
                print cipher_suite
        context = ssl.create_default_context(ssl.Purpose.SERVER_AUTH)                   # création du context
                context.check_hostname = False
                context.verify_mode = ssl.CERT_NONE
                context.options = version[1]                                                   # on spécifie la version de SSL/TLS qu'on veut utiliser
        print context.options
     
        try:
                    context.set_ciphers(cipher_suite)                                       # on spécifie la cipher suite à utiliser
                except Exception as e:
                    print "Exception : ", e
        pass                        
        traceback.print_exc(e)
     
     
                s_ = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
                s = context.wrap_socket(s_)
                #s = context.wrap_socket(s_, server_hostname=hostname)
                #print "timeout : ", s.gettimeout()
                s.settimeout(5)
                #print "timeout : ", s.gettimeout()
     
     
                try:
                    s.connect((hostname, port))                                                 # on tente de se connecter
                    if (is_version_supported == False):
                        print version[0], "supporté"
                        is_version_supported = True
                    print s.cipher()
                    #logging.info("---------------------------------------- %s %s", %(version[0], s.cipher()))
                    s.close()
     
                except socket.timeout:
                    cpt_tentative_max += 1
                    if cpt_tentative_max >= 5:
                        break;
                except Exception as e:                                                                         # si la connexion a échoué
                    #print "[version ", version[0], " with ", cipher_suite, " :: ", e
                    #print s.getpeercert()
                    #traceback.print_exc(e)
        print e
                    pass
            if is_version_supported == False:
                print version[0], "non supporté"
     
            print "\n"
        except Exception as e:
        print e
        traceback.print_exec(e)
        pass
     
    hostname = 'PUT YOUR IP HERE'
    port = 443
     
    A = AnalyseSSL(hostname, port)
    A.try_all_ssl_tls_version()
    Le problème c'est que je ne peux jamais établir de connection utilisant SSL3. J'ai une ip dont je suis sur à 1000% qu'elle accepte du SSL3 avec le cipher suite RC4-SHA (testé avec d'autre outils comme sslyze, testssl nottament).
    Mais impossible avec mon script d'établir une connexion SSL 3 avec ce cipher suite depuis mon script.
    Mon script fonctionne bien pour toutes les versions de TLS, mais dès que je veux utiliser SSL, j'ai l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [SSL: UNSUPPORTED_PROTOCOL] unsupported protocol (_ssl.c:581)
    Pourquoi ne puis-je pas utiliser SSL3 ? (j'ai recompiler la librairie openssl en ajoutant les flags me permettant justement d'utiliser ssl3). La preuve, lorsque je lance la commande suivante sur la même ip, j'arrive bien a me connecter.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    openssl s_client -connect IP -ssl3 -ciphers RC4-SHA
    Comment suis-je sensé résoudre ce problème ?

    Cordialement

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 762
    Par défaut
    Salut,

    Citation Envoyé par mademm Voir le message
    Comment suis-je sensé résoudre ce problème ?
    Peut être en recompilant aussi le module _ssl qui vient avec Python sur la bibliothèque OpenSSL que vous avez compilé.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 10
    Par défaut
    Salut wiztricks,

    Merci pour ta réponse. Je ne suis vraiment pas à l'aise avec la compilation de libraire / modules.
    Quelle procédure suivre pour recomipler une bibli ?

    Cordialement

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 762
    Par défaut
    Citation Envoyé par mademm Voir le message
    Comment je suis censé m'y prendre pour recompiler une bibliothèque python ? (_ssl ici) ?
    En regardant comment cela est fait dans les sources.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Réponses: 0
    Dernier message: 17/12/2012, 14h17
  2. librairie pour python 3.2
    Par juuken dans le forum Bibliothèques tierces
    Réponses: 0
    Dernier message: 12/03/2011, 21h23
  3. connection avec SSL oracle 9i sous Windows
    Par menoran dans le forum Connexions aux bases de données
    Réponses: 0
    Dernier message: 15/05/2010, 12h02
  4. Type de licence des librairies pour Python ?
    Par Invité dans le forum Contribuez
    Réponses: 6
    Dernier message: 09/07/2008, 19h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo