Example #1
0
        /// <summary>
        /// Verifikation ob die Signatur des XML Dokumentes in Orndung ist und ob das Zertifikat mit welchem
        /// das XML Dokument siginiert wurde in seiner Zertifikatskette in Ordnung ist
        /// </summary>
        /// <param name="xmlDoc">signiertes XML Dokument</param>
        /// <param name="keyStore">KeyStore der zum Signierer gehört</param>
        /// <param name="keyStorePasswort">KeyStore Passwort</param>
        /// <param name="xmlSignatureCertificate">Liefert das Zertifikat welches in der Signatur inkludiert ist</param>
        /// <returns>Ist Signatur ok und entspricht das mitgeteilte Zertifikat dem jenigen der das Zertikat gesendet hat</returns>
        public static bool VerifyXmlSignatureAndSignatureCertificate(XmlDocument xmlDoc,
                                                                     Pkcs12Store keyStore,
                                                                     string keyStorePasswort,
                                                                     bool verifiziereZertifikatRootAbstammung,
                                                                     out X509Certificate xmlSignatureCertificate)
        {
            xmlSignatureCertificate = null;
            System.Security.Cryptography.X509Certificates.X509Certificate2 signatureCertificate = new System.Security.Cryptography.X509Certificates.X509Certificate2();

            BaseXmlDsig xmlDsig             = new XmlDsigEnveloped(true);
            bool        signaturVerifiziert = xmlDsig.VerifyXml(xmlDoc, out signatureCertificate);

            //Erstellung eines Referenzzertifikates aus dem KeyStore:
            System.Security.Cryptography.X509Certificates.X509Certificate2 rootCert =
                new System.Security.Cryptography.X509Certificates.X509Certificate2(CertHelper.ConvertPkcs12ToByteArray(keyStore, keyStorePasswort), keyStorePasswort);


            bool istZerifikatGefunden = false;

            xmlSignatureCertificate = DotNetUtilities.FromX509Certificate(signatureCertificate);

            if (verifiziereZertifikatRootAbstammung)
            {
                try
                {
                    xmlSignatureCertificate.Verify(CertHelper.LadeX509CertificateFromPkcs12Store(keyStore).GetPublicKey());
                    istZerifikatGefunden = true;
                }
                catch
                {
                }
            }

            //Sollte die Zeritfikatherkunft (Abstammung von CA Zertifikat) verifiziert werden und stammt das Zertifikat nicht von
            //dem Root Zertifikat ab, dann wird als Prüfungsergebnis pauschal ein false zurückgegebn und somit die Signaturprüfung
            //als fehlgeschlagen markiert.
            if (verifiziereZertifikatRootAbstammung && !istZerifikatGefunden)
            {
                return(false);
            }

            return(signaturVerifiziert);
        }
Example #2
0
        /// <summary>
        /// Signatur eines XML Dokuments mit Hilfe des KeyStores. Aus dem KeyStore wird das Zertifikat gezogen und als
        /// Information, unter Berücksichtigung welchen Zeritfikats das XML signiert wurde, angehängt.
        /// </summary>
        /// <param name="xmlDoc">Zu signierendes XML Dokument</param>
        /// <param name="keyStore">KeyStore der zur Signierung herangezogen werden soll</param>
        /// <param name="keyStorePassword">Passwort zum KeyStore</param>
        private static void SignXml(XmlDocument xmlDoc, Pkcs12Store keyStore, string keyStorePasswort, string signaturAlgorithmus)
        {
            BaseXmlDsig xmlDsig = new XmlDsigEnveloped(true);

            xmlDoc = xmlDsig.SignXml(xmlDoc, keyStore, keyStorePasswort, signaturAlgorithmus);
        }