public static string SignData(string text, string pathPkcsCert, string password) { Pkcs12Store store = CertHelper.LadePkcsStore(pathPkcsCert, password); AsymmetricKeyParameter key = KeyHelper.GetPrivateKeyFromPkcs12Store(store); return(SignData(text, key)); }
/// <summary> /// Erstellt ein ein asymmetrisches Schlüsselpaar, ein Passwort für den privaten Teil des Zertifikates und generiert /// aus diesen erstellten Bestandteilen ein Zertifikat entsprechend der übergebenen Schlüsselstärke. Nach Bedarf können die /// Bestandteile (Zertifikat, KeyStore, Passwort) auf dem Dateisystem gespeichert werden /// </summary> /// <param name="hashtype">Algorithmus des Hashtyps</param> /// <param name="antragsteller">Antragssteller (Subject DN)</param> /// <param name="aussteller">Austeller (Issuer DN)</param> /// <param name="passwortKeyStore">Passwort für den KeyStore, ist es leer wird eins geniert, ist es nicht leer wird das übertragene verwendet</param> /// <param name="keyStore">Rückgabe des generierten KeyStores als Objekt</param> /// <param name="gueltigVon">Ab wann ist das Zertifikat gültig</param> /// <param name="gueltiBis">Bis wann ist das Zertifikat gültig</param> /// <param name="keyStrength">Schlüsselstärke</param> /// <param name="zertifikatSpeicherPfad">Soll das Zertifikat auf einem Laufwerk gespeichert werden, wird hier der Ordner angegeben</param> /// <param name="dateiname">Namen der Dateien für das Passwort, das öffentliche Zertifikat und den KeyStore</param> /// <param name="zertifikatImPfadSpeichern">Soll das Zertifikat in dem angegebenen Pfad gespeichert werden (.der)</param> /// <param name="keyStoreImPfadSpeicher">Soll der KeyStore in dem angebeneen Pfad gespeichert werden (.pfx)</param> /// <param name="passwortImPfadSpeichern">Soll das Passwort in dem angegebenen Pfad gespeichert werden (.pas)</param> /// <param name="caCertificate">Stammzertifikat</param> /// <returns></returns> public static X509Certificate CreateClientCertificateAndKeyStore(Pkcs12Store caStore, X509Certificate caCertificate, Standards.HashType hashtype, string antragsteller, string aussteller, ref string passwortKeyStore, out Pkcs12Store keyStore, DateTime gueltigVon, DateTime gueltiBis, KeyHelper.KeyStrength keyStrength = KeyHelper.KeyStrength.ks2048, string zertifikatSpeicherPfad = null, string dateiname = null, bool zertifikatImPfadSpeichern = false, bool keyStoreImPfadSpeicher = false, bool passwortImPfadSpeichern = false) { //Erstellen eines Schlüsselpaares: AsymmetricCipherKeyPair schluesselPaar = KeyHelper.CreateAsymmetricKeyPair(keyStrength); //Erstellen eines Passwortes für den privaten Teil des Zertifikates: if (string.IsNullOrEmpty(passwortKeyStore)) { passwortKeyStore = KeyHelper.CreateRSAPasswort(); } AsymmetricKeyParameter caPrivateKey = KeyHelper.GetPrivateKeyFromPkcs12Store(caStore); //Erstellen des Zertifikates: X509Certificate certificate = CreateX509Certificate(schluesselPaar.Public, schluesselPaar.Private, hashtype, antragsteller, aussteller, gueltigVon, gueltiBis, caCertificate, caPrivateKey); //Erstelle KeyStore: keyStore = CreatePkcs12Store(certificate, schluesselPaar, antragsteller, caCertificate); //Falls ein Pfad angegeben ist und das Speichern der Zertifikatsinformationen gewünscht ist, werden diese //im Pfad als PKcs12 und DER Format gespeichert, das Passwort falls gewünscht in einer Textfile if (!string.IsNullOrEmpty(zertifikatSpeicherPfad)) { if (string.IsNullOrEmpty(dateiname)) { dateiname = aussteller + "_" + antragsteller + "_" + DateTime.Now.ToString("yyyyMMddHHmmss"); } string speicherPfad = zertifikatSpeicherPfad + "\\" + dateiname; //Speichern des Zertifikates if (zertifikatImPfadSpeichern) { SaveCertAsDER(certificate, speicherPfad); } //Speichern des KeyStores if (keyStoreImPfadSpeicher) { SaveCertAsPkcs12(keyStore, speicherPfad, passwortKeyStore); } //Speichern des Passwortes: if (passwortImPfadSpeichern) { ParseHelper.WriteTextToFile(speicherPfad + ".pas", passwortKeyStore); } } return(certificate); }