Laden...
R
rdilse
myCSharp.de - Member
1
Themen
3
Beiträge
Studium der Visuellen Kommunikation und Wirtschaftsinformatik. Seit 1983 tätig als Softwareentwickler, Berater, Projektleiter sowie in zahlreichen Funktionen in Management und Vertrieb für namhafte IT-Unternehmensberatungen. Seit September 2020 im Ruhestand und freiberuflich als Berater tätig.
Letzte Aktivität
vor einem Monat
Dabei seit
16.03.2025
Beruf
Senior Expert
Herkunft
Bayern
Website
Erstellt vor einem Monat

Vielen herzlichen Dank für deine Hilfe!

Ich habe nur den Konstruktor geändert, damit läuft das kleine Programm sowohl mit RSA- als auch mit ECDsa-Zertifikat. Kleine Ursache, große Wirkung!

            byte[] rawCert = File.ReadAllBytes(certpath);
            X509Certificate2 certificate = new X509Certificate2(rawCert, "David", X509KeyStorageFlags.PersistKeySet);
Erstellt vor einem Monat

Danke für die Antwort und sorry für die fehlenden Informationen.

Hier der Code, der mit einem RSA-Zertifikat funktioniert:

using System;
using System.IO;
using System.Net.Http;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography.X509Certificates;
using System.Threading.Tasks;
namespace ConsoleApp2
{
   class Program
   {
       static String retvalue;
       static void Main(string[] args)
       {
           Console.WriteLine("https://localhost/mbbsim/test4.php?params=show mit SSL und Zertifikat aufgerufen");
           retvalue = new String(GetValue());
           Console.WriteLine(retvalue);
           Console.ReadKey();
       }
       static string GetValue()
       {
           var retstring = "";
           //string certpath = "C:\\temp\\CAItest\\signed.p12";
           string certpath = "C:\\Austausch\\SSL\\XXXXXX_Client_EXAM.p12";
           Console.WriteLine(certpath);
           X509Certificate2 certificate = new X509Certificate2(certpath, "David", X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);
           Console.WriteLine("neues X509certificate2 erzeugt");
           // Fehler in der Server-Zertifikatskette ignorieren
           var handler = new HttpClientHandler();
           Console.WriteLine("neuen HttpClientHandler angelegt");
           handler.ClientCertificates.Add(certificate);
           Console.WriteLine("certificate hinzugefügt");
           handler.ClientCertificateOptions = ClientCertificateOption.Manual;
           Console.WriteLine("ClientCertificateOption.Automatic definiert");
           handler.ServerCertificateCustomValidationCallback =
               (httpRequestMessage, cert, cetChain, policyErrors) =>
               {
                   return true;
               };
           Console.WriteLine("Callback eingerichtet");
           try
           {
               var client = new HttpClient(handler);
               Console.WriteLine("neues HttpClient Objekt erzeugt");
               var webRequest = new HttpRequestMessage(HttpMethod.Get, "https://localhost/mbbsim/test4.php?params=show");
               var response = client.Send(webRequest);
               var reader = new StreamReader(response.Content.ReadAsStream());
               retstring = reader.ReadToEnd();
           }
           catch (System.Net.Http.HttpRequestException e)
           {
               // Win32Exception: Die Anmeldeinformationen, die dem Paket übergeben wurden, wurden nicht erkannt
               retstring = "Fehler " + e.Message;
               if (e.InnerException != null)
                   Console.WriteLine("Inner exception: {0}", e.InnerException);
           }
           return retstring;
       }
   }
}  

Bei Verwendung des hier auskommentierten EC-Zertifikats "signed.p12" kommt es zur Exception mit der Info, dass die Anmeldeinformationen nicht erkannt wurden

Erstellt vor einem Monat

Ich habe eine Anwendung, die einen REST-Webservice über https aufruft. Der Client authentifiziert sich dabei mit einem X509-Zertifikat.

Bislang wurde ein Zertifikat mit RSA-Schlüsseln verwendet und es hat wunderbar funktioniert.

Jetzt wurde das Zertifikat auf Elliptic Curves-Schlüssel umgestellt und ich bekomme den Aufruf nicht mehr zum Laufen, egal ob ich Zertifikat und Schlüssel im PEM-Format benutze oder ein Zertifikat im p12-Format einsetze, das sowohl Zertifikat als auch den privaten Schlüssel enthält.

Ich habe es sowohl mit der System.Security.Cryptography.X509Certificates.HttpClient-Klasse versucht als auch mit Bouncy Castle. Ich setze Visual Studio mit .NET Framework 4.8.1 ein.

Ich kann den Webservice problemlos von Python und von Java (mit Bouncy Castle) aufrufen, sowohl mit RSA- als auch mit Elliptic Curves-Zertifikat.

Wer kann mir ein Code-Snippet zukommen lassen? Im Internet finde ich nichts und das Snippet, das ich von ChatGPT erhalten habe, funktioniert nicht.