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

C# Discussion :

Problème avec un certificat - Api Rest


Sujet :

C#

  1. #1
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    554
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 554
    Par défaut Problème avec un certificat - Api Rest
    Bonjour,
    J'au un souci avec un bout de code tout bête au 1ier abord

    Je suis sur un Windows Server 2022 sur laquelle est hébergé une solution CFT de chez Axway
    Je veux me brancher sur leur API Rest pour checker le statut d'un certain nombre de transferts
    C'était pour planter le décor

    Pour le code, rien de compliquer à priori, en voici un petit extrait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    HttpWebRequest req = (HttpWebRequest)WebRequest.Create(m_Url + string.Format(m_Param, dt.ToString("yyyy-MM-ddTHH:mm:ss")));                
    req.Headers.Add(HttpRequestHeader.Authorization, m_Jeton);
    req.ContentType = "application/json";
    HttpWebResponse response = (HttpWebResponse)req.GetResponse();
    Je précise

    En faisant cela, j'ai une erreur SSL/TLS
    System.Net.WebException: La connexion sous-jacente a été fermée*: Impossible d'établir une relation de confiance pour le canal sécurisé SSL/TLS. ---> System.Security.Authentication.AuthenticationException: Le certificat distant n'est pas valide selon la procédure de validation.

    Je ne comprends pas pourquoi alors j'ai essayé de faire une petite manipulation après quelques recherches sur le net et certains propose de bypasser la vérification des certificats en rajoutant ce petit bout de code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, error) => { return true; };
    OK, je n'ai plus le message d'erreur en question mais lors je veux ensuite lire le contenu de ma réponse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Stream stream = response.GetResponseStream();                               
    StreamReader reader = new StreamReader(stream, Encoding.UTF8);
    string responseFromServer = reader.ReadToEnd();
    J'ai une autre erreur qui semble être dû à un souci de codage entre des versions de cryptage après quelques recherches
    System.FormatException: Le format de la chaîne d'entrée est incorrect.

    Je ne sais plus vers quoi chercher

    Je précise au cas où que la même requête API Rest testé via Soap UI fonctionne et renvoie un résultat
    Il y a bien un souci dans l'établissement de ma connection que je ne comprend absolument pas alors que tout est bien sur le même serveur
    Powershell est à jour
    Framework .net 4.8

    Cà fait 2 jours que je tourne en rond alors si quelqu'un a une petite idée pour m'aider

    Merci

  2. #2
    Membre Expert
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    657
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 657
    Par défaut
    Bonjour,

    Pour avoir eu pas mal de fois ce problème, je peux t'aiguiller. D'abord bypasser la protection n'a jamais marché pour moi car la plupart des serveurs / API ne veulent pas de connexions non sécurisées. Après tu y arriveras peut-être, chaque cas est différent mais si jamais voici la procédure :

    Il va falloir créer & signer un certificat SSL toi-même.

    Mais plusieurs points :

    • Tu peux créer un certificat auto-signé qui peut faire l'affaire si la machine distante n'est pas très regardante, cependant ça ne va pas forcément suffir
    • Tu peux donc créer & faire signer un certificat grâce à Let's Encrypt, qui est une entité reconnu. C'est rapide et gratuit
    • Lors de la création du certificat, il te faudra fournir un DNS obligatoire (une IP seule ne fonctionne pas), tu peux en avoir un gratuit et fonctionnel ici
    • Ca pourrait s'arrêter là mais en C# et sur Windows, il va falloir faire des manipulations pour "bind" le certificat sur un ID de logiciel et un certain port de la machine, celui que tu utilises avec ton programme. Là ou par exemple en Node.js il te suffit juste de récupérer le certificat tel quel, là il te faudra le convertir en un autre format, puis l'ajouter dans les entrailles de Windows.


    Pour la procédure il y a un tas de tuto sur Internet mais le mieux est de demander à ChatGPT de te guider pas à pas, il te donnera clé en main chaque ligne de commande à faire.

    Bref, ça peut faire vraiment très peur, mais rien de bien méchant au final, et sans débourser un centime.

Discussions similaires

  1. Intégration API RestFul avec un Jetty Server
    Par jessyJ dans le forum Services Web
    Réponses: 0
    Dernier message: 29/06/2014, 20h22
  2. [BI4] [BO XI] Gestion des utilisateurs avec l'API RESTful
    Par bjorge dans le forum Webi
    Réponses: 2
    Dernier message: 10/02/2014, 11h24
  3. API rest avec oAuth2
    Par jm54_ dans le forum Django
    Réponses: 10
    Dernier message: 26/11/2013, 11h42
  4. Réponses: 0
    Dernier message: 25/11/2013, 15h22
  5. Réponses: 0
    Dernier message: 25/11/2013, 14h36

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