Ejemplo n.º 1
0
        /// <summary>
        /// Laden der Zertifikate, Erstellen eines XML Objektes der Form rzeAnfrage, Signierung und Verschlüsselung des Objektes,
        /// und Entschlüsselung und Prüfung der Signatur
        /// </summary>
        public static void DemoRzeAnfrage()
        {
            //----------------------------------------------------------------------------------------------------------------------------
            //Auf Client Seite:
            //----------------------------------------------------------------------------------------------------------------------------

            //Laden des Client KeyStores:
            Pkcs12Store clientkeyStore = CertHelper.LadePkcsStore(zertpfad + "\\" + clientCertDateiname + ".pfx", clientPasswort);

            //Laden des Server Zerfifikats (üblich vom Server geladen per Webservice):
            X509Certificate caCertifikate = CertHelper.Ladex509Certificate(zertpfad + "\\" + rzCertDateiname + ".der");

            //Laden des fachliches Dokuments
            XmlDocument fachlichesDokumentClient = new XmlDocument();

            fachlichesDokumentClient.PreserveWhitespace = true;
            fachlichesDokumentClient.LoadXml(testXmlAnfrage);

            //Generierung des Serviceanfrage:
            rzeAnfrage anfrage = ClientHelper.ErstelleRzeAnfrageObjekt(fachlichesDokumentClient,
                                                                       "1111",
                                                                       "111111111",
                                                                       "testapo",
                                                                       "testmethode",
                                                                       "testhersteller",
                                                                       "testsoftware",
                                                                       "testversion",
                                                                       clientkeyStore,
                                                                       clientPasswort,
                                                                       new SecurityKonfiguration(),
                                                                       caCertifikate);



            //----------------------------------------------------------------------------------------------------------------------------
            //Auf Server Seite:
            //----------------------------------------------------------------------------------------------------------------------------

            //Laden des Server KeyStores:
            Pkcs12Store rzKeyStore = CertHelper.LadePkcsStore(zertpfad + "\\" + rzCertDateiname + ".pfx", rzPasswort);

            //Überprüfung ob Signatur in Ordnung ist:
            bool istEntschluesselungErfolgreich;
            bool istSignaturKonfirm;
            bool istSigniertesXmlValide;

            X509Certificate signatureCertificate;

            string fachlicherRohString = ServerHelper.VerifiziereClientAnfrage(anfrage.rzDatenBox,
                                                                               rzKeyStore,
                                                                               rzPasswort,
                                                                               out istEntschluesselungErfolgreich,
                                                                               out istSignaturKonfirm,
                                                                               out istSigniertesXmlValide,
                                                                               out signatureCertificate);


            //Weitere Verarbeitung durch Fachlichen Service -->
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Erstellt ein Objekt vom Typ rzeAnfrage für die Methode verarbeiteAuftrag. Hier erfolgt die Zusammenführung
        /// der ApothekenInformation mit den fachlichen Daten. Die fachlichen Daten werden auf dem obersten Knoten des XML
        /// Dokument signiert und verschlüsselt und als Byte Array in dem Anfrage Objekt abgelegt.
        /// </summary>
        /// <param name="fachlicheAnfrageXml">Xml nach dem Schema RzeRezept Version xxxx</param>
        /// <param name="rzkdnr">Kundennummer der Apotheke</param>
        /// <param name="apoIk">ApothekenIK</param>
        /// <param name="apoInformation">Information zur Apotheke</param>
        /// <param name="apoLogMethode">Methode im fachlichen Sinne, welche die Apotheke beabsichtigt anzusprechen</param>
        /// <param name="softwarehersteller">Hersteller der Warenwirtschaft</param>
        /// <param name="softwarename">Name der Warenwirtschaft</param>
        /// <param name="softwareversion">Version der Warenwirtschaft</param>
        /// <param name="clientKeyStore">KeyStore mit dessen Informationen das XML verschlüsselt werden soll</param>
        /// <param name="clientKeyStorePasswort">Passwort zum KeyStore des Clients</param>
        /// <param name="konfiguration">Sicherheitskonfiguration für die Verschlüsselung</param>
        /// <param name="rzCertificate">Zertifikat des Rechenzentrums</param>
        /// <returns></returns>
        public static rzeAnfrage ErstelleRzeAnfrageObjekt(XmlDocument fachlicheAnfrageXml,
                                                          string rzkdnr,
                                                          string apoIk,
                                                          string apoInformation,
                                                          string apoLogMethode,
                                                          string softwarehersteller,
                                                          string softwarename,
                                                          string softwareversion,
                                                          Pkcs12Store clientKeyStore,
                                                          string clientKeyStorePasswort,
                                                          SecurityKonfiguration konfiguration,
                                                          X509Certificate rzCertificate)
        {
            rzeAnfrage anfrage = new rzeAnfrage();

            XmlHelper.SignAndEncryptXml(fachlicheAnfrageXml,
                                        clientKeyStore,
                                        clientKeyStorePasswort,
                                        konfiguration,
                                        rzCertificate);

            //Bilde das RzeAnfrage Objekt:
            apoInformation apoInfoObjekt = new apoInformation();

            apoInfoObjekt.rzKdNr          = rzkdnr;
            apoInfoObjekt.apoIk           = apoIk;
            apoInfoObjekt.apoInfo         = apoInformation;
            apoInfoObjekt.apoLogMethode   = apoLogMethode;
            apoInfoObjekt.apoSwHersteller = softwarehersteller;
            apoInfoObjekt.apoSwName       = softwarename;
            apoInfoObjekt.apoSwVersion    = softwareversion;
            anfrage.apoInformation        = apoInfoObjekt;
            anfrage.rzDatenBox            = Standards.DefEncoding.GetBytes(ParseHelper.ConvertXmlDocumentToString(fachlicheAnfrageXml));

            return(anfrage);
        }
Ejemplo n.º 3
0
        public static void DemoTestAnfrageNARZTestservice()
        {
            using (NARZService.FiverxLinkSecurityService_PortTypeClient client = new NARZService.FiverxLinkSecurityService_PortTypeClient())
            {
                NARZService.einParameterRequestMsg anfrageObjectLadeRzSecurityVersion = new NARZService.einParameterRequestMsg();

                rzeLadeRzSecurityVersionAnfrage anfrageLadeRzSecurityVersion = ClientHelper.ErstelleRzeLadeRzSecurityVersionAnfrage("9998",
                                                                                                                                    "303706931",
                                                                                                                                    "Testapotheke FiveRxSecurity",
                                                                                                                                    "ladeRzVersion",
                                                                                                                                    "Musterhersteller",
                                                                                                                                    "Mustersoftware",
                                                                                                                                    "Musterversion");

                anfrageObjectLadeRzSecurityVersion.rzeEingabeDaten = ParseHelper.GetStringFromXMLObject <rzeLadeRzSecurityVersionAnfrage>(anfrageLadeRzSecurityVersion);
                NARZService.genericResponseMsg antwortSecurityVersion = client.ladeRzSecurityVersion(anfrageObjectLadeRzSecurityVersion);

                NARZService.zweiParameterRequestMsg anfrageObjectVerarbeiteAuftrag = new NARZService.zweiParameterRequestMsg();

                //Laden des Client KeyStores:
                Pkcs12Store clientkeyStore = CertHelper.LadePkcsStore(zertpfad + "\\" + clientCertDateiname + ".pfx", clientPasswort);

                //Laden des Server Zerfifikats (üblich vom Server geladen per Webservice):
                X509Certificate caCertifikate = CertHelper.Ladex509Certificate(zertpfad + "\\" + rzCertDateiname + ".der");

                //Laden des fachliches Dokuments
                XmlDocument fachlichesDokumentClient = new XmlDocument();
                fachlichesDokumentClient.PreserveWhitespace = true;
                fachlichesDokumentClient.LoadXml(testXmlAnfrage);

                //Generierung des Serviceanfrage:
                rzeAnfrage anfrageVerarbeiteAuftrag = ClientHelper.ErstelleRzeAnfrageObjekt(fachlichesDokumentClient,
                                                                                            "1111",
                                                                                            "111111111",
                                                                                            "testapo",
                                                                                            "testmethode",
                                                                                            "testhersteller",
                                                                                            "testsoftware",
                                                                                            "testversion",
                                                                                            clientkeyStore,
                                                                                            clientPasswort,
                                                                                            new SecurityKonfiguration(),
                                                                                            caCertifikate);


                anfrageObjectVerarbeiteAuftrag.rzeEingabeDaten          = ParseHelper.GetStringFromXMLObject <rzeAnfrage>(anfrageVerarbeiteAuftrag);
                anfrageObjectVerarbeiteAuftrag.rzeLadeRzSecurityVersion = "Test";

                NARZService.genericResponseMsg antwortVerarbeiteAuftrag = client.verarbeiteAuftrag(anfrageObjectVerarbeiteAuftrag);

                bool            istEntschluesselungErfolgreich;
                bool            istSignaturValide;
                bool            istSigniertesXmlValide;
                X509Certificate signatureCertificate;

                rzeAntwort serverAntwort = ParseHelper.GetObjectFromXML <rzeAntwort>(antwortVerarbeiteAuftrag.rzeAusgabeDaten);

                string xmlAsString = ClientHelper.VerifiziereServerAntwort(serverAntwort.rzDatenBox,
                                                                           clientkeyStore,
                                                                           clientPasswort,
                                                                           out istEntschluesselungErfolgreich,
                                                                           out istSignaturValide,
                                                                           out istSigniertesXmlValide,
                                                                           out signatureCertificate);
            }
        }
Ejemplo n.º 4
0
        public static void DemoServiceAnfrageVerarbeiteAuftrag()
        {
            //Laden des Client KeyStores:
            Pkcs12Store clientkeyStore = CertHelper.LadePkcsStore(zertpfad + "\\" + clientCertDateiname + ".pfx", clientPasswort);

            rzeLadeRzZertifikatAntwort serviceZertifikatAntwort;

            //Laden des RzZertifikates:
            using (FiverxLinkSecurityLib.FiveRxSecurityService.FiveRxLinkSecurityServiceSoapClient client =
                       SecurityServiceComHelper.GetFiveRxServiceSecurityClient(fiveRxServiceAdresse, clientkeyStore, clientPasswort))
            {
                FiverxLinkSecurityLib.FiveRxSecurityService.genericResponseMsg responseladeZertifikat =
                    client.ladeRzZertifikat(new FiverxLinkSecurityLib.FiveRxSecurityService.einParameterRequestMsg());

                serviceZertifikatAntwort = ParseHelper.GetObjectFromXML <rzeLadeRzZertifikatAntwort>(responseladeZertifikat.rzeAusgabeDaten);
            }

            X509Certificate caCertifikate = CertHelper.ConvertByteArrayToX509Certificate(serviceZertifikatAntwort.rzZertifikat);

            //Laden des fachliches Dokuments
            XmlDocument fachlichesDokumentClient = new XmlDocument();

            fachlichesDokumentClient.LoadXml(ParseHelper.ReadTextFromFile(pfadAnfrageladeRzVersion));

            //Generierung des Serviceanfrage:
            rzeAnfrage anfrage = ClientHelper.ErstelleRzeAnfrageObjekt(fachlichesDokumentClient,
                                                                       "9998",
                                                                       "303706931",
                                                                       "Testapotheke FiveRxSecurity",
                                                                       "ladeRzVersion",
                                                                       "Musterhersteller",
                                                                       "Mustersoftware",
                                                                       "Musterversion",
                                                                       clientkeyStore,
                                                                       clientPasswort,
                                                                       new SecurityKonfiguration(),
                                                                       caCertifikate);

            FiverxLinkSecurityLib.FiveRxSecurityService.genericResponseMsg response;

            using (FiverxLinkSecurityLib.FiveRxSecurityService.FiveRxLinkSecurityServiceSoapClient client =
                       SecurityServiceComHelper.GetFiveRxServiceSecurityClient(fiveRxServiceAdresse, clientkeyStore, clientPasswort))
            {
                FiverxLinkSecurityLib.FiveRxSecurityService.zweiParameterRequestMsg request = new FiverxLinkSecurityLib.FiveRxSecurityService.zweiParameterRequestMsg();
                request.rzeEingabeDaten          = ParseHelper.GetStringFromXMLObject <rzeAnfrage>(anfrage);
                request.rzeLadeRzSecurityVersion = "Test";
                response = client.verarbeiteAuftrag(request);

                client.Close();
            }

            //Überprüfung ob Signatur in Ordnung ist:
            bool            istEntschluesselungErfolgreich;
            bool            istSignaturValide;
            bool            istSigniertesXmlValide;
            X509Certificate signatureCertificate;

            rzeAntwort serverAntwort = ParseHelper.GetObjectFromXML <rzeAntwort>(response.rzeAusgabeDaten);

            string xmlAsString = ClientHelper.VerifiziereServerAntwort(serverAntwort.rzDatenBox,
                                                                       clientkeyStore,
                                                                       clientPasswort,
                                                                       out istEntschluesselungErfolgreich,
                                                                       out istSignaturValide,
                                                                       out istSigniertesXmlValide,
                                                                       out signatureCertificate);
        }