Entwickler-Ecke
Basistechnologien - X509Certificate und openssl
paddy14 - Di 07.06.11 10:05
Titel: X509Certificate und openssl
Guten Tag Forum,
hat vllt einer von euch nen Link, wo beschrieben ist wie ich mit Openssl ein Zertifikat erstellen kann damit ich das in meinem Programm verwenden kann, ist keine Webanwendung nur ein Server und dann die Clients.
Mein Programm sollte Daten über SSLStream versenden. Dafür muss ich mir ja ein Zertifikat erstellen und mir dann mit X509Certificate ein x509 Zertifikat erstellen.
Es sollte ja eine .cer datei sein aber wie geht das nun mit dem Privaten und Öffentlichen Schlüssel von statten.
Danke für eure Antworten.
Mfg Patrick
paddy14 - Di 07.06.11 22:23
sslStream.AuthenticateAsClient(serverName)
Was muss anstelle von serverName stehen, hoffe ihr könnt mir das beantworten???
paddy14 - Mi 08.06.11 13:27
Ich habe schon überall gegooglet aber nix passendens gefunden.
Mein Problem ist das ich nicht genau weiß wie ich ein Zertifikat richtig erstelle damit ich in csharp mit sslstream arbeiten kann.
Bekomme hier immer diese Fehlermeldung:
C#-Quelltext
1:
| X509Certificate cert = X509Certificate.CreateFromCertFile(certi); |
Der ursprüngliche Signaturgeber wurde nicht gefunden.
Danach habe ich auch schon gesucht aber nix dolles gefunden.
Wenn ihr mir helfen könnt bitte nicht mehr auf iwelche Seiten verweisen, die habe ich schon so gut wie alle durch ok.
Danke
Trashkid2000 - Mi 08.06.11 14:06
Hallo,
also das Zertifikat kannst Du so erstellen:
Quelltext
1:
| makecert.exe -sr CurrentUser -ss My -a sha1 -n CN=Server -sky exchange -pe |
Das Zertifikat mit private Key landen dann im Zertifikatsspeicher.
Diese kannst Du dann entweder direkt aus dem Speicher laden (was natürlich das Beste ist), oder Du exportierst dem privaten Schlüssel (der öffnetliche ist ja per default dabei) und lädtst es dann mit Deinem genannten Code.
Für die Client-Server-Geschichte ist diese Seite ganz hilfreich:
http://www.leastprivilege.com/SslStreamSample.aspx
LG
paddy14 - Mi 08.06.11 15:32
Danke für deine Antwort, das makecert geht nicht da muss iwas mit der Sytax net stimmen.
Ich habe es dann mal mit dieser versucht.
Quelltext
1: 2: 3:
| makecert -sk myNewKey -r -n "CN=Jay Adams, OU=Certification,O=A Datum Corporation,E=adatum@adatum.com" -ss my myNew.cer |
so und das ist erstmal mein ganz einfacher code vom server:
[/cs]
TcpClient client;
IPAddress ip = IPAddress.Parse("192.168.100.50");
TcpListener listener = new TcpListener(ip, 13000);
listener.Start();
client = listener.AcceptTcpClient();
string Certificate = "C:\\Programme\\Microsoft.NET\\SDK\\v1.1\\BIN\\savecert.cer";
SslStream ssl = new SslStream(client.GetStream(), false);
X509Certificate cert = X509Certificate.CreateFromCertFile(Certificate);
ssl.AuthenticateAsServer(cert);
Console.WriteLine("ok:" + ssl.IsAuthenticated);
C#-Quelltext
1:
| Und dieser ist vom Client: |
int port = 13000;
IPAddress ip = IPAddress.Parse("192.168.100.50");
TcpClient client = new TcpClient();
client.Connect(ip, port);
SslStream ssl = new SslStream(client.GetStream());
ssl.AuthenticateAsClient("C:\\Programme\\Microsoft.NET\\SDK\\v1.1\\BIN\\savecert.cer");
Console.WriteLine("geht:"+ssl.IsAuthenticated);
[cs]
Vllt ist ja auch was mit meinem code net in Ordnung.
Danke schonmal für die Hilfe.
Trashkid2000 - Mi 08.06.11 17:29
Hi,
also, das Serverzertifikat muss einen privaten Schlüssel besitzen, ansonsten geht es nicht.
Und beim Client muss auch das vom Server gesendete Zertifikat durch ein Callback geprüft werden.
Ich poste einfach mal etwas Code:
C#-Quelltext
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:
| static void Main(string[] args) { new Thread(StartServer).Start(); new Thread(ConnectClient).Start(); Console.ReadKey(); }
private static void StartServer() { TcpListener listener = new TcpListener(IPAddress.Parse("127.0.0.1"), 13000); listener.Start(); using (TcpClient client = listener.AcceptTcpClient()) { using (SslStream ssl = new SslStream(client.GetStream())) { X509Certificate cert = X509Certificate.CreateFromCertFile("C:\\temp\\pfxFile.pfx"); ssl.AuthenticateAsServer(cert, false, SslProtocols.Default, false); Console.WriteLine("Server ok:" + ssl.IsAuthenticated); } } }
private static void ConnectClient() { using (TcpClient client = new TcpClient()) { client.Connect(IPAddress.Parse("127.0.0.1"), 13000); using (SslStream sslStream = new SslStream(client.GetStream(), false, new RemoteCertificateValidationCallback(CertificateValidationCallback))) { sslStream.AuthenticateAsClient("client1"); Console.WriteLine("geht:" + sslStream.IsAuthenticated); } } }
private static bool CertificateValidationCallback(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; } |
Soviel erstmal
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!