Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
0
        /// <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);
        }