|  | 
Chilkat  HOME  Android™  AutoIt  C  C#  C++  Chilkat2-Python  CkPython  Classic ASP  DataFlex  Delphi DLL  Go  Java  Node.js  Objective-C  PHP Extension  Perl  PowerBuilder  PowerShell  PureBasic  Ruby  SQL Server  Swift  Tcl  Unicode C  Unicode C++  VB.NET  VBScript  Visual Basic 6.0  Visual FoxPro  Xojo Plugin
| (Classic ASP) Sign SOAP XML for New Zealand Customs ServiceSee more XAdES ExamplesDemonstrates how to create an XAdES signed SOAP XML pertaining to the New Zealand Customs Service.Note: This example requires Chilkat v9.5.0.96 or later. 
 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </head> <body> <% ' This example assumes the Chilkat API to have been previously unlocked. ' See Global Unlock Sample for sample code. success = 1 ' Create the following XML to be signed: ' <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" ' xmlns:v1="http://customs.govt.nz/jbms/msggate/reqresp/v1"> ' <soapenv:Header> ' <wsse:Security soapenv:mustUnderstand="1" ' xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" ' xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> ' <wsu:Timestamp wsu:Id="TS-037E78514E9B9132CB16817563559151"> ' <wsu:Created>2023-04-17T18:32:35.913Z</wsu:Created> ' <wsu:Expires>2023-04-17T19:32:35.913Z</wsu:Expires> ' </wsu:Timestamp> ' </wsse:Security> ' </soapenv:Header> ' <soapenv:Body wsu:Id="id-8" ' xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> ' <v1:RequestResponse> ' <v1:Submitter>TEST1234</v1:Submitter> ' <v1:MailboxMsgId>999999</v1:MailboxMsgId> ' </v1:RequestResponse> ' </soapenv:Body> ' </soapenv:Envelope> ' Create a random ID like this: TS-037E78514E9B9132CB16817563559151 ' For versions of Chilkat < 10.0.0, use CreateObject("Chilkat_9_5_0.StringBuilder") set tsId = Server.CreateObject("Chilkat.StringBuilder") success = tsId.Append("TS-") success = tsId.AppendRandom(16,"hex") ' STR-037E78514E9B9132CB16817563559614 ' For versions of Chilkat < 10.0.0, use CreateObject("Chilkat_9_5_0.StringBuilder") set strId = Server.CreateObject("Chilkat.StringBuilder") success = strId.Append("STR-") success = strId.AppendRandom(16,"hex") ' KI-037E78514E9B9132CB16817563559583 ' For versions of Chilkat < 10.0.0, use CreateObject("Chilkat_9_5_0.StringBuilder") set keyInfoId = Server.CreateObject("Chilkat.StringBuilder") success = keyInfoId.Append("KI-") success = keyInfoId.AppendRandom(16,"hex") ' Create a date/time for the current time with this format: 2023-04-17T18:32:35.913Z ' For versions of Chilkat < 10.0.0, use CreateObject("Chilkat_9_5_0.CkDateTime") set dt = Server.CreateObject("Chilkat.CkDateTime") success = dt.SetFromCurrentSystemTime() ' For versions of Chilkat < 10.0.0, use CreateObject("Chilkat_9_5_0.StringBuilder") set sbNow = Server.CreateObject("Chilkat.StringBuilder") success = sbNow.Append(dt.GetAsTimestamp(0)) ' If we really need the milliseconds, we can replace the "Z" with ".000Z" ' The server will also likely accept a timestamp without milliseconds, such as 2023-04-17T18:32:35Z n = sbNow.Replace("Z",".000Z") ' For versions of Chilkat < 10.0.0, use CreateObject("Chilkat_9_5_0.StringBuilder") set sbNowPlusOneHour = Server.CreateObject("Chilkat.StringBuilder") success = dt.AddSeconds(3600) success = sbNowPlusOneHour.Append(dt.GetAsTimestamp(0)) n = sbNowPlusOneHour.Replace("Z",".000Z") ' For versions of Chilkat < 10.0.0, use CreateObject("Chilkat_9_5_0.Xml") set xmlToSign = Server.CreateObject("Chilkat.Xml") xmlToSign.Tag = "soapenv:Envelope" success = xmlToSign.AddAttribute("xmlns:soapenv","http://schemas.xmlsoap.org/soap/envelope/") success = xmlToSign.AddAttribute("xmlns:v1","http://customs.govt.nz/jbms/msggate/reqresp/v1") success = xmlToSign.UpdateAttrAt("soapenv:Header|wsse:Security",1,"soapenv:mustUnderstand","1") success = xmlToSign.UpdateAttrAt("soapenv:Header|wsse:Security",1,"xmlns:wsse","http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd") success = xmlToSign.UpdateAttrAt("soapenv:Header|wsse:Security",1,"xmlns:wsu","http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd") success = xmlToSign.UpdateAttrAt("soapenv:Header|wsse:Security|wsu:Timestamp",1,"wsu:Id",tsId.GetAsString()) xmlToSign.UpdateChildContent "soapenv:Header|wsse:Security|wsu:Timestamp|wsu:Created",sbNow.GetAsString() xmlToSign.UpdateChildContent "soapenv:Header|wsse:Security|wsu:Timestamp|wsu:Expires",sbNowPlusOneHour.GetAsString() success = xmlToSign.UpdateAttrAt("soapenv:Body",1,"wsu:Id","id-8") success = xmlToSign.UpdateAttrAt("soapenv:Body",1,"xmlns:wsu","http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd") xmlToSign.UpdateChildContent "soapenv:Body|v1:RequestResponse|v1:Submitter","TEST1234" xmlToSign.UpdateChildContent "soapenv:Body|v1:RequestResponse|v1:MailboxMsgId","999999" ' For versions of Chilkat < 10.0.0, use CreateObject("Chilkat_9_5_0.XmlDSigGen") set gen = Server.CreateObject("Chilkat.XmlDSigGen") gen.SigLocation = "soapenv:Envelope|soapenv:Header|wsse:Security" gen.SigLocationMod = 0 gen.SigId = "SIG-037E78514E9B9132CB16817563559695" gen.SigNamespacePrefix = "ds" gen.SigNamespaceUri = "http://www.w3.org/2000/09/xmldsig#" gen.SignedInfoPrefixList = "soapenv v1" gen.IncNamespacePrefix = "ec" gen.IncNamespaceUri = "http://www.w3.org/2001/10/xml-exc-c14n#" gen.SignedInfoCanonAlg = "EXCL_C14N" gen.SignedInfoDigestMethod = "sha256" ' Set the KeyInfoId before adding references.. gen.KeyInfoId = keyInfoId.GetAsString() ' -------- Reference 1 -------- ' For versions of Chilkat < 10.0.0, use CreateObject("Chilkat_9_5_0.Xml") set xml1 = Server.CreateObject("Chilkat.Xml") xml1.Tag = "ds:Transforms" success = xml1.UpdateAttrAt("ds:Transform",1,"Algorithm","http://www.w3.org/2001/10/xml-exc-c14n#") success = xml1.UpdateAttrAt("ds:Transform|ec:InclusiveNamespaces",1,"PrefixList","wsse soapenv v1") success = xml1.UpdateAttrAt("ds:Transform|ec:InclusiveNamespaces",1,"xmlns:ec","http://www.w3.org/2001/10/xml-exc-c14n#") success = gen.AddSameDocRef2(tsId.GetAsString(),"sha256",xml1,"") ' -------- Reference 2 -------- ' For versions of Chilkat < 10.0.0, use CreateObject("Chilkat_9_5_0.Xml") set xml2 = Server.CreateObject("Chilkat.Xml") xml2.Tag = "ds:Transforms" success = xml2.UpdateAttrAt("ds:Transform",1,"Algorithm","http://www.w3.org/2001/10/xml-exc-c14n#") success = xml2.UpdateAttrAt("ds:Transform|ec:InclusiveNamespaces",1,"PrefixList","v1") success = xml2.UpdateAttrAt("ds:Transform|ec:InclusiveNamespaces",1,"xmlns:ec","http://www.w3.org/2001/10/xml-exc-c14n#") success = gen.AddSameDocRef2("id-8","sha256",xml2,"") ' Provide a certificate + private key. (PFX password is test123) ' For versions of Chilkat < 10.0.0, use CreateObject("Chilkat_9_5_0.Cert") set cert = Server.CreateObject("Chilkat.Cert") success = cert.LoadPfxFile("qa_data/pfx/cert_test123.pfx","test123") If (success <> 1) Then Response.Write "<pre>" & Server.HTMLEncode( cert.LastErrorText) & "</pre>" Response.End End If success = gen.SetX509Cert(cert,1) gen.KeyInfoType = "Custom" ' Create the custom KeyInfo XML.. ' For versions of Chilkat < 10.0.0, use CreateObject("Chilkat_9_5_0.Xml") set xmlCustomKeyInfo = Server.CreateObject("Chilkat.Xml") xmlCustomKeyInfo.Tag = "wsse:SecurityTokenReference" success = xmlCustomKeyInfo.AddAttribute("wsu:Id",strId.GetAsString()) success = xmlCustomKeyInfo.UpdateAttrAt("wsse:KeyIdentifier",1,"EncodingType","http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary") success = xmlCustomKeyInfo.UpdateAttrAt("wsse:KeyIdentifier",1,"ValueType","http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3") ' Insert the single-line base64 of the signing certificate's DER cert.UncommonOptions = "Base64CertNoCRLF" xmlCustomKeyInfo.UpdateChildContent "wsse:KeyIdentifier",cert.GetEncoded() xmlCustomKeyInfo.EmitXmlDecl = 0 gen.CustomKeyInfoXml = xmlCustomKeyInfo.GetXml() ' Load XML to be signed... ' For versions of Chilkat < 10.0.0, use CreateObject("Chilkat_9_5_0.StringBuilder") set sbXml = Server.CreateObject("Chilkat.StringBuilder") success = xmlToSign.GetXmlSb(sbXml) gen.Behaviors = "IndentedSignature" ' Sign the XML... gen.VerboseLogging = 1 success = gen.CreateXmlDSigSb(sbXml) If (success <> 1) Then Response.Write "<pre>" & Server.HTMLEncode( gen.LastErrorText) & "</pre>" Response.End End If ' Save the signed XML to a file. success = sbXml.WriteFile("c:/temp/qa_output/signedXml.xml","utf-8",0) Response.Write "<pre>" & Server.HTMLEncode( sbXml.GetAsString()) & "</pre>" %> </body> </html> | ||||
© 2000-2025 Chilkat Software, Inc. All Rights Reserved.