/// <summary> /// Herunterladen des Zertifikats /// </summary> /// <param name="orderId">ID des Auftrags</param> /// <returns>Zertifikat von der OSTC (private Schlüssel fehlt hier!)</returns> /// <remarks>Es wird eine Exception ausgelöst, wenn noch kein Schlüssel verfügbar ist.</remarks> public async Task<IReadOnlyList<X509Certificate>> DownloadCertificateAsync(string orderId) { var query = new OstcSchluessel { Auftragsnummer = orderId, ItemElementName = (OstcKeyType)Enum.Parse(typeof(OstcKeyType), Sender.SenderId.Type.ToString()), Item = Sender.SenderId.Id, }; var queryData = OstcUtils.Serialize(query, Iso88591); ValidateData(queryData, OstcMessageType.KeyData); var now = DateTime.Now; var message = new TransportRequestType() { version = SupportedVersionsType.Item11, profile = ExtraProfileOstc, TransportHeader = CreateRequestHeader(now, OstcDataType.Key, ExtraScenario.RequestWithResponse), TransportBody = new TransportRequestBodyType { Items = new object[] { new DataType { Item = new Base64CharSequenceType() { Value = queryData, }, }, }, }, }; ValidateRequest(message, OstcMessageType.Key); var messageData = OstcExtraSerializer.Iso88591.Serialize(message); var request = CreateRequest(Network.Requests.KeyRequest); using (var requestStream = await Task.Factory.FromAsync(request.BeginGetRequestStream, request.EndGetRequestStream, null)) { requestStream.Write(messageData, 0, messageData.Length); } using (var response = await Task.Factory.FromAsync(request.BeginGetResponse, request.EndGetResponse, null)) { var serializer = new XmlSerializer(typeof(TransportResponseType)); var responseData = (TransportResponseType)serializer.Deserialize(response.GetResponseStream()); var flags = responseData.TransportHeader.GetFlags().ToList(); if (flags.Any(x => x.weight == ExtraFlagWeight.Error)) throw new Ostc2Exception(flags); var certData = ((Base64CharSequenceType)((DataType)responseData.TransportBody.Items[0]).Item).Value; var parser = new X509CertificateParser(); var certs = parser.ReadCertificates(certData).Cast<X509Certificate>().ToList(); return certs; } }
/// <summary> /// Herunterladen des Zertifikats /// </summary> /// <param name="orderId">ID des Auftrags</param> /// <returns>Zertifikat von der OSTC (private Schlüssel fehlt hier!)</returns> /// <remarks>Es wird eine Exception ausgelöst, wenn noch kein Schlüssel verfügbar ist.</remarks> public async Task <IReadOnlyList <X509Certificate> > DownloadCertificateAsync(string orderId) { var query = new OstcSchluessel { Auftragsnummer = orderId, ItemElementName = (OstcKeyType)Enum.Parse(typeof(OstcKeyType), Sender.SenderId.Type.ToString()), Item = Sender.SenderId.Id, }; var queryData = OstcUtils.Serialize(query, Iso88591); ValidateData(queryData, OstcMessageType.KeyData); var now = DateTime.Now; var message = new TransportRequestType() { version = SupportedVersionsType.Item11, profile = ExtraProfileOstc, TransportHeader = CreateRequestHeader(now, OstcDataType.Key, ExtraScenario.RequestWithResponse), TransportBody = new TransportRequestBodyType { Items = new object[] { new DataType { Item = new Base64CharSequenceType() { Value = queryData, }, }, }, }, }; ValidateRequest(message, OstcMessageType.Key); var messageData = OstcExtraSerializer.Iso88591.Serialize(message); var request = CreateRequest(Network.Requests.KeyRequest); using (var requestStream = await Task.Factory.FromAsync(request.BeginGetRequestStream, request.EndGetRequestStream, null)) { requestStream.Write(messageData, 0, messageData.Length); } using (var response = await Task.Factory.FromAsync(request.BeginGetResponse, request.EndGetResponse, null)) { var serializer = new XmlSerializer(typeof(TransportResponseType)); var responseData = (TransportResponseType)serializer.Deserialize(response.GetResponseStream()); var flags = responseData.TransportHeader.GetFlags().ToList(); if (flags.Any(x => x.weight == ExtraFlagWeight.Error)) { throw new Ostc2Exception(flags); } var certData = ((Base64CharSequenceType)((DataType)responseData.TransportBody.Items[0]).Item).Value; var parser = new X509CertificateParser(); var certs = parser.ReadCertificates(certData).Cast <X509Certificate>().ToList(); return(certs); } }