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

Services Web Discussion :

[HTTPS, Certificats, Winform, VB] Délai lors du premier appel à une validation de certificat.


Sujet :

Services Web

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 107
    Points : 63
    Points
    63
    Par défaut [HTTPS, Certificats, Winform, VB] Délai lors du premier appel à une validation de certificat.
    M'sieurs Dames, bien le bonjour.

    Après avoir fouillé sur la toile et dans ce forum, je n'arrive pas à retrouver une telle problématique, alors je vous la soumet.

    Je développe en VB.NET et en client lourd (enfin, dans ce cas présent, au moins).
    Je dois appeler un service Ouaib de manière sécurisée.
    Pour cela, le fournisseur du service m'a gentiment donné un fichier .cer, un pfx et un mot de passe.

    Je réussis à m'y connecter et à obtenir ce que je veux du service.
    Cependant, à chaque "première" authentification (demande de validation du certificat), j'ai un délai de latence d'environ 15s (première = premier appel dans la session de mon application winform, si je la ferme (l'application ) et que je la relance, je retrouve ma latence).
    Les appels suivants sont quasi immédiats.

    Voici le bout de code qui correspond à mon pilotage.

    Je n'ai pas de configuration spécifique réseau mise en place pour ce service.

    Si quelqu'un(e) avait des pistes, des idées où fouiller voire même une solution, je lui serai éternellement reconnaissant !

    Merci et bonne journée à vous.

    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
    Public Function requeteLancer(eType As eGP, sMethode As eMethodes, sParametres As String, ByRef sReponse As String) As Int32
    'Initialisations 
        sReponse = String.Empty
    'Construction de la requête
        Dim sService As String = _adresse & sMethode.ToString
        If eType = eGP.mGet AndAlso String.IsNullOrEmpty(sParametres.Trim) = False Then sService &= "?param=" & sParametres
        Dim laRequete As HttpWebRequest = DirectCast(HttpWebRequest.Create(sService), HttpWebRequest)
        laRequete.Timeout = 20000
    'S'il y a un certificat, on l'intègre
        If String.IsNullOrEmpty(_certificat) = False Then
            Dim lePFX As New X509Certificate2(_pfx, _password, X509KeyStorageFlags.UserKeySet)
            Dim leCER As New X509Certificate2(_certificat)
            Dim leStore As New X509Store("MaBoite", StoreLocation.CurrentUser)
            leStore.Open(OpenFlags.ReadWrite)
            If leStore.Certificates.Contains(leCER) = False Then leStore.Add(leCER)
            leStore.Close()
            laRequete.ClientCertificates.Add(lePFX)
        End If
    'On construit la requete
        laRequete.ContentType = "application/json"
        laRequete.Method = "GET"
        If eType = eGP.mPost Then laRequete.Method = "POST"
    'On écrit les paramètres en flux, s'il y a lieu
        If String.IsNullOrEmpty(sParametres.Trim) = False Then
            If eType = eGP.mPost Then
            Dim wriRequete As IO.StreamWriter = New IO.StreamWriter(laRequete.GetRequestStream)
            wriRequete.Write(sParametres)
            wriRequete.Close()
            End If
        End If
        Dim laReponse As WebResponse = Nothing
        Dim leFlux As IO.Stream = Nothing
        'Et on la lance
        Try
            laReponse = laRequete.GetResponse() <-- C'est cet appel qui est plus ou moins lent selon le temps de validation du certificat..... ?!?!?
            leFlux = laReponse.GetResponseStream
            sReponse = New IO.StreamReader(leFlux).ReadToEnd
        Catch ex As WebException
            Dim httpReponse As HttpWebResponse = DirectCast(ex.Response, HttpWebResponse)
            If leFlux Is Nothing = False Then leFlux.Flush()
            If laReponse Is Nothing = False Then laReponse.Close()
            If httpReponse Is Nothing = False Then Return httpReponse.StatusCode
            Return 500
        End Try
    'Nettoyage, etc.
        If leFlux Is Nothing = False Then leFlux.Flush()
        If laReponse Is Nothing = False Then laReponse.Close()
        laRequete = Nothing
    'Si on est là, c'est que c'est bon
        Return 0
    End Function

  2. #2
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 31
    Points : 12
    Points
    12
    Par défaut
    Bonjour.

    Je n'ai aucune idée au sujet de votre problématique.
    En revanche, avez vous observé la session depuis un sniffer du style Wireshark pour en savoir plus ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 107
    Points : 63
    Points
    63
    Par défaut
    Bonjour et oui, j'ai "sniffé" le process...
    Mais en https et avec mon inexpérience de l'outil (WireShark), je n'ai pu que constater ce délai entre deux "requêtes"...



    Quelle information puis-je dénicher dans les logs plus précis de Wike Shark ?

    Merci et bonne journée.

  4. #4
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 31
    Points : 12
    Points
    12
    Par défaut
    Effectivement on vois bien les 15 secondes d'écart.
    Ça serait le serveur qui serait long à la détente ?

    Si vous vous connectez avec l'outil openssl directement ça donne quoi ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 107
    Points : 63
    Points
    63
    Par défaut
    Je télécharge l'outil, lit le manuel (s'il y a) et je reposte dès que j'ai de l'info.

  6. #6
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 31
    Points : 12
    Points
    12
    Par défaut
    Désolé, j'ai oublié de vous donner la commande directement !

    openssl s_client -connect google.fr:443 -servername google.fr

    Sachant que l'option servername est optionnel. Elle permet de tenir compte de SNI (Vhost SSL).

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 107
    Points : 63
    Points
    63
    Par défaut
    Et j'ai une jolie réponse que je suis incapable d'interpréter...
    (à part le handshake failure qui me parait suspicieux... )

    C'est grave, docteur ?

    C:\OpenSSL-Win64\bin>openssl s_client -connect truc.fr:443 -servername truc.fr
    WARNING: can't open config file: /usr/local/ssl/openssl.cnf
    Loading 'screen' into random state - done
    CONNECTED(00000194)
    depth=2 C = US, O = "thawte, Inc.", OU = Certification Services Division, OU = "
    (c) 2006 thawte, Inc. - For authorized use only", CN = thawte Primary Root CA
    verify error:num=19:self signed certificate in certificate chain
    verify return:0
    9244:error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure:.\ssl\s3_pkt.c:1256:SSL alert number 40
    9244:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:.\ssl\s23_lib.c:177:
    ---
    Certificate chain
    0 s:/C=FR/ST=LA/L=ICI/O=SITE/OU=DSI/CN=*.site.fr
    i:/C=US/O=Thawte, Inc./CN=Thawte SSL CA
    1 s:/C=FR/ST=LA/L=ICI/O=SITE/OU=DSI/CN=*.site.fr
    i:/C=US/O=Thawte, Inc./CN=Thawte SSL CA
    2 s:/C=US/O=thawte, Inc./OU=Certification Services Division/OU=(c) 2006 thawte, Inc. - For authorized use only/CN=thawte Primary Root CA
    i:/C=US/O=thawte, Inc./OU=Certification Services Division/OU=(c) 2006 thawte, Inc. - For authorized use only/CN=thawte Primary Root CA
    3 s:/C=US/O=Thawte, Inc./CN=Thawte SSL CA
    i:/C=US/O=thawte, Inc./OU=Certification Services Division/OU=(c) 2006 thawte,
    Inc. - For authorized use only/CN=thawte Primary Root CA
    ---
    Server certificate
    -----BEGIN CERTIFICATE-----
    M(...)Q==
    -----END CERTIFICATE-----
    subject=/C=FR/ST=LA/L=ICI/O=site/OU=DSI/CN=*.site.fr
    issuer=/C=US/O=Thawte, Inc./CN=Thawte SSL CA
    ---
    Acceptable client certificate CA names
    /DC=fr/DC=site/CN=site Certification Authority
    ---
    SSL handshake has read 4654 bytes and written 370 bytes
    ---
    New, TLSv1/SSLv3, Cipher is AES256-SHA256
    Server public key is 2048 bit
    Secure Renegotiation IS supported
    Compression: NONE
    Expansion: NONE
    SSL-Session:
    Protocol : TLSv1.2
    Cipher : A0000-SHA256
    Session-ID:
    Session-ID-ctx:
    Master-Key: A(...)7
    Key-Arg : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1370532757
    Timeout : 300 (sec)
    Verify return code: 19 (self signed certificate in certificate chain)
    ---

  8. #8
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 31
    Points : 12
    Points
    12
    Par défaut
    Votre client et votre serveur semblent utiliser deux crypto. différentes.

    Vous pouvez voir la liste des crypto disponibles avec l'option cipherlist.
    Mais je vous conseil avant de commencer par essayer différentes versions du protocole SSL ( protocole SSL 1 / 2 / 3 / TLS 1).

    Il faut s'assurer que le client et le serveur soient capables d'utiliser les mêmes paramètres.
    Si vous n'avez pas la main sur le serveur vous devrez vous adapter.

    Est-ce que la requête à travers openssl était longue également ?

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 107
    Points : 63
    Points
    63
    Par défaut
    Bonjour et merci pour l'analyse et la réponse.

    Pour répondre à la question sur Open SSL : non, aucun délai constaté.

    Je regarde de suite comment choisir les types et versions des protocoles sous .NET et je re post dès que j'ai des éléments plus probants...

    Bonne journée et encore merci pour le coup de main !

Discussions similaires

  1. Temps lors du premier appel d'un Web Service
    Par kirsito dans le forum Services Web
    Réponses: 6
    Dernier message: 24/08/2012, 09h40
  2. Réponses: 2
    Dernier message: 06/03/2008, 20h24
  3. Probleme lors de l'appel à une méthode
    Par doditch77 dans le forum C++
    Réponses: 10
    Dernier message: 07/01/2008, 00h58
  4. Probleme lors de l'appel à une fonction
    Par jonnyboy dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 08/08/2007, 09h15
  5. Réponses: 12
    Dernier message: 23/05/2007, 21h40

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