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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 107
    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 averti
    Inscrit en
    Mai 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 31
    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 confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 107
    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 averti
    Inscrit en
    Mai 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 31
    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 confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 107
    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 averti
    Inscrit en
    Mai 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 31
    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).

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