Laden...

X509Certificate2 PrivateKey laden [==> Bouncycastle]

Erstellt von S.R. vor 15 Jahren Letzter Beitrag vor 12 Jahren 7.521 Views
S
S.R. Themenstarter:in
221 Beiträge seit 2007
vor 15 Jahren
X509Certificate2 PrivateKey laden [==> Bouncycastle]

Hallo,

ich habe hier ein offizielles Zertifikat von Thawte. Dies soll dazu verwendet werden, eine TCP-Verbindung üer SSL/TLS zu verschlüsseln. Ich habe einmal das Zertifikat und zusätzlich natürlich noch den privaten Schlüssel vorliegen. Der Aufbau der beiden Dateien ist wie folgt:

[PRE]certificate:
-----BEGIN CERTIFICATE-----
MIIDYD...
-----END CERTIFICATE-----[/PRE]
[PRE]privateKey:
-----BEGIN RSA PRIVATE KEY-----
MIICXg...
-----END RSA PRIVATE KEY-----[/PRE]

Im Code lade ich das Zertifikat wie folgt:

X509Certificate2 cert = new X509Certificate2("D:\\Zertifikat.crt");

Damit ist natürlich der private Schlüssel noch nicht geladen. Ich finde aber keine Möglichkeit, den Wert "PrivateKey" zu setzen. Der ist bei mir immer Null und daher kann die Authentifizierung später gar nicht funktionieren.
Habe schon versucht, die beiden Dateien in eine zu kopieren und dann zu laden. Dies geht aber schief, wenn der PrivateKey oben ist. Ist er unten, dann wird er auch nicht berücksichtigt.

Hat jemand von euch einen Tipp, wie ich das hinbekomme.

Dankend

Stefan

X
1.177 Beiträge seit 2006
vor 15 Jahren

Hi zusammen,

würd mich interessieren. Brauch ich demnächst^^

🙂

Xynratron

Herr, schmeiss Hirn vom Himmel - Autsch!

Die Erfahrung zeigt immer wieder, dass viele Probleme sich in Luft auslösen, wenn man sich den nötigen Abstand bzw. Schlaf gönnt.

N
4.644 Beiträge seit 2004
vor 15 Jahren
X509Certificate2 cert = new X509Certificate2( "MyCertificte.pfx", "MyPassword" );
S
S.R. Themenstarter:in
221 Beiträge seit 2007
vor 15 Jahren

Hallo,

wie wandel ich denn meine Dateien in eine pfx-Datei um? So wie ich das nämlich verstanden haben, ist das Untereinanderschreiben der beiden Abschnitte in einer Datei das sogenannte pem-Format. Um dieses Pem in pfx umzuwandeln, wird aber der private Schlüssel der CA benötigt - und den habe ich natürlich nicht, da das Zertifikat ja von extern kommt.

Sehe ich das so richtig und wenn ja, was bleiben mir noch für Optionen?

Vielen Dank

Stefan

S
S.R. Themenstarter:in
221 Beiträge seit 2007
vor 15 Jahren

Hallo,

ich habe soeben noch mal intensiv nach der Umwandlung von pem to pfx gesucht und stoße dabei immer wieder auf folgende OpenSSL-Variante:

openssl pkcs12 -export -in cert.pem -inkey key.pem -certfile cacert.pem -out cert.pfx 

key.pem wäre in meinem fall der privateKey und cert.pem mein Zertifikat. Diese Dateien liegen mir vor. Wie zu sehen, wird aber auch noch das CA-Zert benötigt - in meinem Fall ja das von Thawte - aber da komm ich natürlich nicht dran.

Weiter auf der Suche...

Stefan

S
S.R. Themenstarter:in
221 Beiträge seit 2007
vor 15 Jahren

Hallo,

ich muss hier doch noch mal nerven und den Beitrag was nach oben pushen, bin nämlich leider in diesem Bereich immer noch net weiter gekommen und langsam drenkt das Thema doch was 🙂

Bin für jeden Tipp dankbar.

Stefan

S
8.746 Beiträge seit 2005
vor 15 Jahren

Du kannst den Key nicht setzen. Die .NET-Klassen erlauben es nicht Zertifikate zu erstellen. Nur laden und zu nutzen. Du kannst z.B. den PK lesen und damit verschlüsseln.

Um Zertifikate zu erstellen musst du direkt mit der Crypto-API arbeiten oder entsprechende Wrapper-Libs nutzen. Die sind aber i.d.R. kommerziell.

S
S.R. Themenstarter:in
221 Beiträge seit 2007
vor 15 Jahren

Hallo,

nur damit wir uns nicht falsch verstehen - ich will doch gar kein Zertifikat erstellen.

Ich habe doch

  • den privaten Key
  • den public Key
  • offizielles Zertifikat von Thawte

Ich muss diese drei Werte nur irgendwie in .NET laden, damit ich diese dort weiter nutzen kann, also den SslStream. Also von Erstellen ist aus meiner Sicht hier gar keine Rede, oder verstehe ich das falsch?

Dankend

Stefan

F
10.010 Beiträge seit 2004
vor 15 Jahren

Such mal nach bouncycastle.

Das ist die beste opensource lib, wenn es um crypto sachen geht.

@svenson:
Man könnte damit sogar certificates ( Selfsigned ) selber machen.

S
8.746 Beiträge seit 2005
vor 15 Jahren

Man könnte damit sogar certificates ( Selfsigned ) selber machen.

Hey, geile Lib. Ist mir noch gar nicht über den Weg gelaufen. Danke für den Hinweis.

F
10.010 Beiträge seit 2004
vor 15 Jahren

Das ich das noch erleben darf 😁 8)

Z
47 Beiträge seit 2006
vor 12 Jahren

Ich habe ein ähnliches Problem, welches ich seit Tagen versuche zu lösen, aber ich bin wohl nicht im Stande die Informationen so zusammenzusetzen, dass ich wüsste wie dies zu implementieren ist.

Bei mir ist es ein Webservice den ich ansprechen muss. Habe ein File in dem oben private RSA key steht und darunte certificate.

Könnt ihr mir bitte erklären und wenn möglich Code-Beispiele, wie ich mit Bouncycastle (wie bisher recherchiert geht dies wohl nicht so einfach mit .net Klassen, ich glaube die Files hier sind im PEM format) das zu implementieren ist?

Mein Zertifikat wollte ich so erstellen:
X509Certificate2 cert = new X509Certificate2( "file" );

Passwort habe ich keins. Wie gesagt file enthält private key und certificate. Ist das überhaupt ausreichend um eine two-way ssl authentifizierung zu implementieren?

Mein Code sieht dann in verkürzter Form so aus:


X509Certificate2 cert = new X509Certificate2( @"C:\file.txt" );
QcsiWebService.WSAdapterBCIClient webService = new QcsiWebService.WSAdapterBCIClient("WSAdapterBFPortHttps");
webService.ChannelFactory.Credentials.ClientCertificate.Certificate = cert;
string response = webService.helloWorld();            

Bei Aufruf von webService.helloWorld(), kommt es dann zu einer Exception die besagt dass kein SSL Kanal und keine sichere Verbindung aufgebaut werden konnte. Hab die Ex Meldung gerade nicht hier. Kann ich wenn ich wieder im Büro bin noch nachreichen.

Die Property cert.PrivateKey ist aber null nachdem instanziieren von cert. "File.txt" ist funktionstüchtig da dieses mit SoapUI oder in Java Keystore erfolgreich eingebunden werden kann und Aufrufe an den Webservice erfolgreich sind. Weis nicht ob es ausreicht mit bouncycastle den PrivateKey zu setzen!?

Das setzen des Zertifikats wird vermutlich auch anders gemacht als ich es hier mache, aber das ist auch nicht das Problem.

Bräuchte bitte Hilfe wie hier die Aufrufe (mit bouncycastle api)zu machen sind.
Hoffe ihr könnt mir weiterhelfen, schon mal vielen Dank vorab!