private string signSoapMessage(string soapBody, X509Certificate2 certificate, SignSoapMessage.SignAlgorithm hashAlgorithm) { // Create XML document from usigned message text XmlDocument doc = new XmlDocument(); doc.LoadXml(soapBody); // Create signed message SignSoapMessage.SoapMessage message = new SignSoapMessage.SoapMessage(); message.Certificate = certificate; message.Body = doc.DocumentElement; XmlDocument result = message.GetXml(true, hashAlgorithm); // Convert XML document into text return(result.OuterXml); }
static void Main(string[] args) { XmlDocument doc = new XmlDocument(); doc.Load(@"E:\test\soap_body.xml"); X509Certificate2 cert = null; try { // Open the store of personal certificates. X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser); store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly); X509Certificate2Collection collection = (X509Certificate2Collection)store.Certificates; X509Certificate2Collection fcollection = (X509Certificate2Collection)collection.Find(X509FindType.FindByTimeValid, DateTime.Now, false); X509Certificate2Collection scollection = X509Certificate2UI.SelectFromCollection(fcollection, "Sign", "Select certificate", X509SelectionFlag.SingleSelection); if (scollection != null && scollection.Count == 1) { cert = scollection[0]; if (cert.HasPrivateKey == false) { throw new Exception("Certificate has no private key."); } } store.Close(); } catch (Exception) { throw new Exception("An error has occurred."); } SoapMessage message = new SoapMessage(); message.Certificate = cert; message.Body = doc.DocumentElement; var result = message.GetXml(true); result.Save(@"E:\test\soap_message.xml"); }