/// <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 --> }
/// <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); }
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); } }
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); }