Пример #1
0
 public static SignStrategy ForAS4Message(AS4Message as4Message, CalculateSignatureConfig config)
 {
     return(new SignStrategy(
                as4Message,
                as4Message.EnvelopeDocument ?? AS4XmlSerializer.ToSoapEnvelopeDocument(as4Message, CancellationToken.None),
                config));
 }
Пример #2
0
        /// <summary>
        /// Sign the <see cref="AS4Message" />
        /// </summary>
        /// <param name="messagingContext"></param>
        /// <returns></returns>
        public async Task <StepResult> ExecuteAsync(MessagingContext messagingContext)
        {
            if (messagingContext == null)
            {
                throw new ArgumentNullException(nameof(messagingContext));
            }

            if (messagingContext.AS4Message == null)
            {
                throw new InvalidOperationException(
                          $"{nameof(SignAS4MessageStep)} requires an AS4Message to sign but no AS4Message is present in the MessagingContext");
            }

            if (messagingContext.AS4Message.IsEmpty)
            {
                Logger.Debug("No signing will be performed on the message because it's empty");
                return(await StepResult.SuccessAsync(messagingContext));
            }

            Signing signInfo = RetrieveSigningInformation(
                messagingContext.AS4Message,
                messagingContext.SendingPMode,
                messagingContext.ReceivingPMode);

            if (signInfo == null)
            {
                Logger.Trace("No signing will be performend on the message because no signing information was found in either Sending or Receiving PMode");
                return(await StepResult.SuccessAsync(messagingContext));
            }

            if (signInfo.IsEnabled == false)
            {
                Logger.Trace("No signing will be performend on the message because the PMode siging information is disabled");
                return(await StepResult.SuccessAsync(messagingContext));
            }

            Logger.Info($"(Outbound)[{messagingContext.AS4Message.GetPrimaryMessageId()}] Sign AS4Message with given signing information of the PMode");

            X509Certificate2 certificate = RetrieveCertificate(signInfo);
            var settings =
                new CalculateSignatureConfig(
                    signingCertificate: certificate,
                    referenceTokenType: signInfo.KeyReferenceMethod,
                    signingAlgorithm: signInfo.Algorithm,
                    hashFunction: signInfo.HashFunction);

            SignAS4Message(settings, messagingContext.AS4Message);

            JournalLogEntry logEntry = JournalLogEntry.CreateFrom(
                messagingContext.AS4Message,
                $"Signed with certificate {settings.SigningCertificate.FriendlyName} and reference {settings.ReferenceTokenType} "
                + $"using algorithm {settings.SigningAlgorithm} and hash {settings.HashFunction}");

            return(await StepResult
                   .Success(messagingContext)
                   .WithJournalAsync(logEntry));
        }
Пример #3
0
        /// <summary>
        /// Digitally signs the AS4Message using the given <paramref name="signatureConfiguration"/>
        /// </summary>
        /// <param name="signatureConfiguration"></param>
        public void Sign(CalculateSignatureConfig signatureConfiguration)
        {
            if (signatureConfiguration == null)
            {
                throw new ArgumentNullException(nameof(signatureConfiguration));
            }

            SignStrategy signingStrategy = SignStrategy.ForAS4Message(this, signatureConfiguration);

            SecurityHeader.Sign(signingStrategy);
        }
Пример #4
0
        public static AS4Message SignWithCertificate(AS4Message message, X509Certificate2 certificate)
        {
            var config = new CalculateSignatureConfig(certificate,
                                                      X509ReferenceType.BSTReference,
                                                      Constants.SignAlgorithms.Sha256,
                                                      Constants.HashFunctions.Sha256);

            message.Sign(config);

            return(message);
        }
        private static SignStrategy CreateSignStrategyForSigning()
        {
            var        signingId  = new SigningId("header-id", "body-id");
            AS4Message as4Message = AS4Message.Empty;

            as4Message.SigningId = signingId;

            var signingConfig = new CalculateSignatureConfig(new StubCertificateRepository().GetStubCertificate(),
                                                             X509ReferenceType.BSTReference, Constants.SignAlgorithms.Sha256, Constants.HashFunctions.Sha256);

            return(SignStrategy.ForAS4Message(as4Message, signingConfig));
        }
Пример #6
0
        private string SaveAS4MessageUnit(MessageUnit unit, bool signed)
        {
            AS4Message as4Message = AS4Message.Create(unit);

            if (signed)
            {
                var config = new CalculateSignatureConfig(
                    new X509Certificate2(
                        holodeck_partya_certificate,
                        certificate_password,
                        X509KeyStorageFlags.Exportable));

                as4Message.Sign(config);
            }

            return(_bodyStore.SaveAS4Message("not used location", as4Message));
        }
Пример #7
0
 private static void SignAS4Message(CalculateSignatureConfig settings, AS4Message message)
 {
     try
     {
         message.Sign(settings);
     }
     catch (Exception exception)
     {
         Logger.Error(exception.Message);
         if (exception.InnerException != null)
         {
             Logger.Error(exception.InnerException.Message);
         }
         Logger.Trace(exception.StackTrace);
         throw;
     }
 }
Пример #8
0
        private static AS4Message SignAS4MessageWithPullRequestCert(AS4Message message)
        {
            var certificate =
                new X509Certificate2(
                    @".\samples\certificates\AccessPointA.pfx",
                    "Pz4cZK4SULUwmraZa",
                    X509KeyStorageFlags.Exportable);

            var config = new CalculateSignatureConfig(certificate,
                                                      X509ReferenceType.BSTReference,
                                                      Constants.SignAlgorithms.Sha256,
                                                      Constants.HashFunctions.Sha256);

            message.SecurityHeader.Sign(
                SignStrategy.ForAS4Message(message, config));

            return(message);
        }
Пример #9
0
 private SignStrategy(AS4Message message, XmlDocument soapEnvelope, CalculateSignatureConfig config)
     : base(soapEnvelope)
 {
     _as4Message = message;
     _config     = config;
 }