protected bool VerifierSigned(SoapEnvelope envelope, X509Certificate2 certificate, XmlNamespaceManager nsmanager) { String result = envelope.DocumentElement.InnerText != null ? envelope.DocumentElement.InnerText : ""; try { XmlNode signature = envelope.DocumentElement.SelectSingleNode(Constants.DOMAIN_SIGNATURE, nsmanager); var signedXml = new XmlSignature(envelope.DocumentElement); signedXml.LoadXml(signature as XmlElement); return(signedXml.CheckSignature(certificate, true)); } catch (Exception) { throw new Exception(result); } }
public void Signature(S envelope, C certificate) { soap = null; certificateSignature = null; soap = envelope as SoapEnvelope; certificateSignature = certificate as X509Certificate2; InitializeEnvelope(soap); XmlElement nodeSecurity = (XmlElement)soap.CreateNode(XmlNodeType.Element, Constants.WSSE, Constants.SECURITY, Constants.WSSECURITY_SECEXT); nodeSecurity.SetAttribute(Constants.NS_WEBSERVICE_UTILITY, Constants.WSSECURITY_UTILITY); soap.Header.AppendChild(nodeSecurity); soap.Header.AppendChild(nodeSecurity); InitializeSoapEnv(soap); XmlSignature signedXml = new XmlSignature(soap); KeyInfo keyInfo = new KeyInfo(); signedXml.SigningKey = certificateSignature.PrivateKey; KeyInfoX509Data keyInfoData = new KeyInfoX509Data(); keyInfoData.AddIssuerSerial(certificateSignature.Issuer, certificateSignature.GetSerialNumberString()); keyInfo.AddClause(keyInfoData); signedXml.KeyInfo = keyInfo; signedXml.SignedInfo.CanonicalizationMethod = SignedXml.XmlDsigExcC14NTransformUrl; signedXml.AddReference(GetReference()); signedXml.ComputeSignature(); var signedElement = signedXml.GetXml(); nodeSecurity.AppendChild(signedElement); CreateToken(soap, certificateSignature, (XmlElement)signedElement.ChildNodes[2]); }