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 :

HttpClient passer un certificat et une private key


Sujet :

C#

  1. #1
    Expert confirmé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 066
    Points : 4 233
    Points
    4 233
    Par défaut HttpClient passer un certificat et une private key
    Bonjour,

    j'essaye de transformer une requête curl en c#, voici la requête fonctionnel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    curl --insecure --cert C:/Users/Eddy/.chia/mainnet/config/ssl/full_node/private_full_node.crt --key C:/Users/Eddy/.chia/mainnet/config/ssl/full_node/private_full_node.key -d '{}' -H "Content-Type: application/json" -X POST https://localhost:8555/get_blockchain_state | python -m json.tool
    et voici mon code :
    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
      string certificateFile = @"C:\Users\Eddy\.chia\mainnet\config\ssl\full_node\private_full_node.crt";
                    string keyFile = @"C:\Users\Eddy\.chia\mainnet\config\ssl\full_node\private_full_node.key";
     
                    string cert = File.ReadAllText(certificateFile);
                    string key = File.ReadAllText(keyFile);
     
     
                    var handler = new HttpClientHandler();
                    //handler.ClientCertificateOptions = ClientCertificateOption.Manual;
                    //handler.SslProtocols = SslProtocols.Tls12;
                    handler.ServerCertificateCustomValidationCallback = (requestMessage, certificate, chain, policyErrors) => true;
                    handler.ClientCertificates.Add(new X509Certificate2(certificateFile, key));
                    using (var httpClient = new HttpClient(handler))
                    {
                        using (var request = new HttpRequestMessage(new HttpMethod("POST"), "https://localhost:8555/get_blockchain_state"))
                        {
                            request.Content = new StringContent("{}");
                            request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");
     
                            var response = await httpClient.SendAsync(request);
                        }
                    }
    Je reçois cette erreur : ' Received an unexpected EOF or 0 bytes from the transport stream.'

    Je ne sais pas si je transmet le certificat de la bonne façon, idéalement j'aimerai sinon attaqué cette url par un websocket (j'ai tenté d'utiliser le client websocket mais j'ai la même erreur retourné).

    Voici la doc de l'api que j'essaye d'interroger https://github.com/Chia-Network/chia...RPC-Interfaces

    Merci pour vos réponses.

  2. #2
    Expert confirmé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 066
    Points : 4 233
    Points
    4 233
    Par défaut
    J'ai trouvé la solution il faut charger le certificat de cette façon :
    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
       string certificateFile = @"C:\Users\Eddy\.chia\mainnet\config\ssl\full_node\private_full_node.crt";
                    string keyFile = @"C:\Users\Eddy\.chia\mainnet\config\ssl\full_node\private_full_node.key";
     
                    string cert = File.ReadAllText(certificateFile);
                    string key = File.ReadAllText(keyFile);
     
                    ICertificateProvider provider = new CertificateFromFileProvider(cert, key);
     
                    var publicCertificate = X509Certificate2.CreateFromPemFile(certificateFile, keyFile);
     
                    using (var tmpCert = new X509Certificate2(publicCertificate.Export(X509ContentType.Pfx)))
                    {
     
                        var handler = new HttpClientHandler();
                        handler.ServerCertificateCustomValidationCallback = (requestMessage, certificate, chain, policyErrors) => true;
                        handler.ClientCertificates.Add(tmpCert);
                        using (var httpClient = new HttpClient(handler))
                        {
                            using (var request = new HttpRequestMessage(new HttpMethod("POST"), "https://localhost:8555/get_blockchain_state"))
                            {
                                request.Content = new StringContent("{}");
                                request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");
     
                                var response = await httpClient.SendAsync(request);
                                if (response.IsSuccessStatusCode)
                                {
                                    string result = await response.Content.ReadAsStringAsync();
                                }
                            }
                        }
     
                    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/12/2017, 15h49
  2. [débutant] Aide pour mettre une FOREIGN KEY sur une table
    Par cauldron dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/11/2004, 17h16
  3. Passer en paramètre d'une fonction (...)
    Par Captain_JS dans le forum C++
    Réponses: 5
    Dernier message: 03/11/2004, 07h18
  4. passer deux parametre a une page
    Par unix27 dans le forum ASP
    Réponses: 3
    Dernier message: 30/09/2004, 18h14
  5. [VB6]Passer le focus à une instance précedente
    Par Jeremiah dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 16/09/2003, 10h01

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