public void findTmodels() { Console.Out.Write("find_tModel"); Assert.True(online); find_tModel fb = new find_tModel(); fb.name = new name(UDDIConstants.WILDCARD, null); fb.findQualifiers = new string[] { UDDIConstants.APPROXIMATE_MATCH }; tModelList bl = inquiry.find_tModel(fb); Assert.NotNull(bl); Assert.NotNull(bl.tModelInfos); Assert.True(bl.tModelInfos.Length > 0); for (int i = 0; i < bl.tModelInfos.Length; i++) { Assert.IsNotNullOrEmpty(bl.tModelInfos[i].tModelKey); Assert.NotNull(bl.tModelInfos[i].name); } PrintUDDI <tModelList> p = new PrintUDDI <tModelList>(); if (serialize) { Console.Out.WriteLine(p.print(bl)); } }
/// <summary> /// Digitally signs a UDDI entity, such as a business, service, tmodel or /// binding template using the map to provide certificate key stores and /// credentials. The UDDI entity MUST support XML Digital Signatures /// (tModel, Business, Service, Binding Template) /// </summary> /// <param name="bt"></param> /// <returns></returns> public object signUddiEntity(object bt) { XmlDocument doc = null; if (bt.GetType().Equals(typeof(bindingTemplate))) { PrintUDDI <bindingTemplate> p = new PrintUDDI <bindingTemplate>(); String s = p.print(bt); doc = StringToXmlDocument(s); } if (bt.GetType().Equals(typeof(businessService))) { PrintUDDI <businessService> p = new PrintUDDI <businessService>(); String s = p.print(bt); doc = StringToXmlDocument(s); } if (bt.GetType().Equals(typeof(businessEntity))) { PrintUDDI <businessEntity> p = new PrintUDDI <businessEntity>(); String s = p.print(bt); doc = StringToXmlDocument(s); } if (bt.GetType().Equals(typeof(tModel))) { PrintUDDI <tModel> p = new PrintUDDI <tModel>(); String s = p.print(bt); doc = StringToXmlDocument(s); } X509Certificate2 key = GetKey(); XmlElement sig = SignXml(doc, key); //append the signature to the document doc.ChildNodes[1].AppendChild(sig); String signedXml = doc.OuterXml; if (bt.GetType().Equals(typeof(bindingTemplate))) { PrintUDDI <bindingTemplate> p = new PrintUDDI <bindingTemplate>(); return(p.createObject(signedXml)); } if (bt.GetType().Equals(typeof(businessService))) { PrintUDDI <businessService> p = new PrintUDDI <businessService>(); return(p.createObject(signedXml)); } if (bt.GetType().Equals(typeof(businessEntity))) { PrintUDDI <businessEntity> p = new PrintUDDI <businessEntity>(); return(p.createObject(signedXml)); } if (bt.GetType().Equals(typeof(tModel))) { PrintUDDI <tModel> p = new PrintUDDI <tModel>(); return(p.createObject(signedXml)); } return(bt); }
public void findServices() { Console.Out.Write("findServices"); Assert.True(online); find_service fb = new find_service(); fb.name = new name[] { new name(UDDIConstants.WILDCARD, null) }; fb.findQualifiers = new string[] { UDDIConstants.APPROXIMATE_MATCH }; serviceList bl = inquiry.find_service(fb); Assert.NotNull(bl); Assert.NotNull(bl.serviceInfos); Assert.True(bl.serviceInfos.Length > 0); for (int i = 0; i < bl.serviceInfos.Length; i++) { Assert.IsNotNullOrEmpty(bl.serviceInfos[i].businessKey); Assert.IsNotNullOrEmpty(bl.serviceInfos[i].serviceKey); } PrintUDDI <serviceList> p = new PrintUDDI <serviceList>(); if (serialize) { Console.Out.WriteLine(p.print(bl)); } }
void SigningAndVerify(object uddielement) { uddielement = ds.signUddiEntity(uddielement); Assert.NotNull(uddielement); if (serialize) { if (uddielement.GetType().Equals(typeof(bindingTemplate))) { PrintUDDI <bindingTemplate> p = new PrintUDDI <bindingTemplate>(); Console.Out.WriteLine(p.print(uddielement)); } if (uddielement.GetType().Equals(typeof(businessService))) { PrintUDDI <businessService> p = new PrintUDDI <businessService>(); Console.Out.WriteLine(p.print(uddielement)); } if (uddielement.GetType().Equals(typeof(businessEntity))) { PrintUDDI <businessEntity> p = new PrintUDDI <businessEntity>(); Console.Out.WriteLine(p.print(uddielement)); } if (uddielement.GetType().Equals(typeof(tModel))) { PrintUDDI <tModel> p = new PrintUDDI <tModel>(); Console.Out.WriteLine(p.print(uddielement)); } } String err = ""; bool check = ds.verifySignedUddiEntity(uddielement, out err); Console.Out.WriteLine("Signature status is " + check + ": " + err); Assert.True(check); Assert.True(String.IsNullOrEmpty(err)); validAllSignatureElementsArePresent(uddielement); }
/// <summary> /// From file /// create business, save in juddi, download from juddi, sign and save it, /// download it again, verify sig is valid /// </summary> /// <param name="config"></param> void SignSaveAndVerifyToJuddi(String config) { UDDIClient clerkManager = null; Transport transport = null; UDDIClerk clerk = null; try { clerkManager = new UDDIClient(config); transport = clerkManager.getTransport("default"); UDDI_Security_SoapBinding security = transport.getUDDISecurityService(); UDDI_Inquiry_SoapBinding inquiry = transport.getUDDIInquiryService(); UDDI_Publication_SoapBinding publish = transport.getUDDIPublishService(); clerk = clerkManager.getClerk("default"); businessEntity be = new businessEntity(); be.name = new name[] { new name("Test biz", "en") }; Console.Out.WriteLine("saving test biz"); businessEntity complete = clerk.register(be); Console.Out.WriteLine("attempting to sign"); DigSigUtil ds = new DigSigUtil(clerkManager.getClientConfig().getDigitalSignatureConfiguration()); businessEntity signed = (businessEntity)ds.signUddiEntity(complete); PrintUDDI<businessEntity> p = new PrintUDDI<businessEntity>(); Console.Out.WriteLine("signed successfully!"); if (serialize) Console.Out.WriteLine(p.print(signed)); Console.Out.WriteLine("attempting verify signature locally"); String err = ""; bool valid = ds.verifySignedUddiEntity(signed, out err); Console.Out.WriteLine("Signature is " + (valid ? "Valid, Yippy!" : "Invalid!") + " msg: " + err); Assert.True(valid); Assert.True(String.IsNullOrEmpty(err)); Console.Out.WriteLine("saving to signed entity to the registry"); clerk.register(signed); Console.Out.WriteLine("reloading content from the server..."); get_businessDetail gsd = new get_businessDetail(); gsd.authInfo = clerk.getAuthToken(clerk.getUDDINode().getSecurityUrl()); gsd.businessKey = new string[] { signed.businessKey }; businessDetail saved = inquiry.get_businessDetail(gsd); Console.Out.WriteLine("done. attempting verify signed entity"); if (serialize) Console.Out.WriteLine(p.print(saved.businessEntity[0])); err = ""; valid = ds.verifySignedUddiEntity(saved.businessEntity[0], out err); Console.Out.WriteLine("Signature is " + (valid ? "Valid, Yippy!" : "Invalid!") + " msg: " + err); } catch (Exception ex) { while (ex != null) { System.Console.WriteLine("Error! " + ex.Message); ex = ex.InnerException; } throw ex; } finally { if (transport != null && transport is IDisposable) { ((IDisposable)transport).Dispose(); } if (clerk != null) clerk.Dispose(); } }
internal static void Run(string[] args) { UDDIClient clerkManager = null; Transport transport = null; UDDIClerk clerk = null; try { clerkManager = new UDDIClient("uddi.xml"); transport = clerkManager.getTransport("uddiv2"); UDDI_Security_SoapBinding security = transport.getUDDISecurityService(); UDDI_Inquiry_SoapBinding inquiry = transport.getUDDIInquiryService(); UDDI_Publication_SoapBinding publish = transport.getUDDIPublishService(); clerk = clerkManager.getClerk("uddiv2"); save_business sb = new save_business(); get_authToken rq = new get_authToken(); rq.cred = "username"; rq.userID = "username"; String token = security.get_authToken(rq).authInfo; System.Console.WriteLine("Got an auth token..."); sb.authInfo = token; sb.businessEntity = new businessEntity[1]; sb.businessEntity[0] = new businessEntity(); sb.businessEntity[0].name = new name[] { new name("test business from .net via uddi2 translation", "en") }; sb.businessEntity[0].description = new description[] { new description("a description", "en") }; businessDetail detail = publish.save_business(sb); System.Console.WriteLine("business saved"); PrintUDDI <businessDetail> p = new PrintUDDI <businessDetail>(); Console.Out.WriteLine(p.print(detail)); save_service ss = new save_service(); ss.authInfo = token; ss.businessService = new businessService[1]; ss.businessService[0] = new businessService(); ss.businessService[0].name = new name[] { new name("hello world", "en") }; ss.businessService[0].businessKey = detail.businessEntity[0].businessKey; serviceDetail sd = publish.save_service(ss); System.Console.WriteLine("service saved"); PrintUDDI <serviceDetail> p1 = new PrintUDDI <serviceDetail>(); Console.Out.WriteLine(p1.print(sd)); save_binding sbd = new save_binding(); sbd.authInfo = token; sbd.bindingTemplate = new bindingTemplate[1]; sbd.bindingTemplate[0] = new bindingTemplate(); sbd.bindingTemplate[0].Item = new accessPoint("http://localhost", "endPoint"); sbd.bindingTemplate[0].serviceKey = sd.businessService[0].serviceKey; bindingDetail bd = publish.save_binding(sbd); System.Console.WriteLine("binding saved"); PrintUDDI <bindingDetail> p2 = new PrintUDDI <bindingDetail>(); Console.Out.WriteLine(p2.print(bd)); save_tModel stm = new save_tModel(); stm.authInfo = token; stm.tModel = new tModel[1]; stm.tModel[0] = new tModel(); stm.tModel[0].name = new name("a uddiv2 tmodel", "en"); tModelDetail td = publish.save_tModel(stm); System.Console.WriteLine("tModel saved"); PrintUDDI <tModelDetail> p3 = new PrintUDDI <tModelDetail>(); Console.Out.WriteLine(p3.print(td)); } catch (Exception ex) { while (ex != null) { System.Console.WriteLine("Error! " + ex.Message); ex = ex.InnerException; } } finally { if (transport != null && transport is IDisposable) { ((IDisposable)transport).Dispose(); } if (clerk != null) { clerk.Dispose(); } } }
/// <summary> /// From file /// create business, save in juddi, download from juddi, sign and save it, /// download it again, verify sig is valid /// </summary> /// <param name="config"></param> void SignSaveAndVerifyToJuddi(String config) { UDDIClient clerkManager = null; Transport transport = null; UDDIClerk clerk = null; try { clerkManager = new UDDIClient(config); transport = clerkManager.getTransport("default"); UDDI_Security_SoapBinding security = transport.getUDDISecurityService(); UDDI_Inquiry_SoapBinding inquiry = transport.getUDDIInquiryService(); UDDI_Publication_SoapBinding publish = transport.getUDDIPublishService(); clerk = clerkManager.getClerk("default"); businessEntity be = new businessEntity(); be.name = new name[] { new name("Test biz", "en") }; Console.Out.WriteLine("saving test biz"); businessEntity complete = clerk.register(be); Console.Out.WriteLine("attempting to sign"); DigSigUtil ds = new DigSigUtil(clerkManager.getClientConfig().getDigitalSignatureConfiguration()); businessEntity signed = (businessEntity)ds.signUddiEntity(complete); PrintUDDI <businessEntity> p = new PrintUDDI <businessEntity>(); Console.Out.WriteLine("signed successfully!"); if (serialize) { Console.Out.WriteLine(p.print(signed)); } Console.Out.WriteLine("attempting verify signature locally"); String err = ""; bool valid = ds.verifySignedUddiEntity(signed, out err); Console.Out.WriteLine("Signature is " + (valid ? "Valid, Yippy!" : "Invalid!") + " msg: " + err); Assert.True(valid); Assert.True(String.IsNullOrEmpty(err)); Console.Out.WriteLine("saving to signed entity to the registry"); clerk.register(signed); Console.Out.WriteLine("reloading content from the server..."); get_businessDetail gsd = new get_businessDetail(); gsd.authInfo = clerk.getAuthToken(clerk.getUDDINode().getSecurityUrl()); gsd.businessKey = new string[] { signed.businessKey }; businessDetail saved = inquiry.get_businessDetail(gsd); Console.Out.WriteLine("done. attempting verify signed entity"); if (serialize) { Console.Out.WriteLine(p.print(saved.businessEntity[0])); } err = ""; valid = ds.verifySignedUddiEntity(saved.businessEntity[0], out err); Console.Out.WriteLine("Signature is " + (valid ? "Valid, Yippy!" : "Invalid!") + " msg: " + err); } catch (Exception ex) { while (ex != null) { System.Console.WriteLine("Error! " + ex.Message); ex = ex.InnerException; } throw ex; } finally { if (transport != null && transport is IDisposable) { ((IDisposable)transport).Dispose(); } if (clerk != null) { clerk.Dispose(); } } }
internal static void Run(string[] args) { UDDIClient clerkManager = null; Transport transport = null; UDDIClerk clerk = null; try { clerkManager = new UDDIClient("uddi.xml"); transport = clerkManager.getTransport("uddiv2"); UDDI_Security_SoapBinding security = transport.getUDDISecurityService(); UDDI_Inquiry_SoapBinding inquiry = transport.getUDDIInquiryService(); UDDI_Publication_SoapBinding publish = transport.getUDDIPublishService(); clerk = clerkManager.getClerk("uddiv2"); save_business sb = new save_business(); get_authToken rq=new get_authToken(); rq.cred = "username"; rq.userID="username"; String token=security.get_authToken(rq).authInfo; System.Console.WriteLine("Got an auth token..."); sb.authInfo = token; sb.businessEntity = new businessEntity[1]; sb.businessEntity[0] = new businessEntity(); sb.businessEntity[0].name = new name[] { new name("test business from .net via uddi2 translation", "en") }; sb.businessEntity[0].description = new description[] { new description("a description", "en") }; businessDetail detail= publish.save_business(sb); System.Console.WriteLine("business saved"); PrintUDDI<businessDetail> p = new PrintUDDI<businessDetail>(); Console.Out.WriteLine(p.print(detail)); save_service ss = new save_service(); ss.authInfo = token; ss.businessService = new businessService[1]; ss.businessService[0] = new businessService(); ss.businessService[0].name = new name[] { new name("hello world", "en") }; ss.businessService[0].businessKey = detail.businessEntity[0].businessKey; serviceDetail sd = publish.save_service(ss); System.Console.WriteLine("service saved"); PrintUDDI<serviceDetail> p1 = new PrintUDDI<serviceDetail>(); Console.Out.WriteLine(p1.print(sd)); save_binding sbd = new save_binding(); sbd.authInfo = token; sbd.bindingTemplate = new bindingTemplate[1]; sbd.bindingTemplate[0] = new bindingTemplate(); sbd.bindingTemplate[0].Item = new accessPoint("http://localhost", "endPoint"); sbd.bindingTemplate[0].serviceKey = sd.businessService[0].serviceKey; bindingDetail bd = publish.save_binding(sbd); System.Console.WriteLine("binding saved"); PrintUDDI<bindingDetail> p2 = new PrintUDDI<bindingDetail>(); Console.Out.WriteLine(p2.print(bd)); save_tModel stm = new save_tModel(); stm.authInfo = token; stm.tModel = new tModel[1]; stm.tModel[0] = new tModel(); stm.tModel[0].name = new name("a uddiv2 tmodel", "en"); tModelDetail td = publish.save_tModel(stm); System.Console.WriteLine("tModel saved"); PrintUDDI<tModelDetail> p3 = new PrintUDDI<tModelDetail>(); Console.Out.WriteLine(p3.print(td)); } catch (Exception ex) { while (ex != null) { System.Console.WriteLine("Error! " + ex.Message); ex = ex.InnerException; } } finally { if (transport != null && transport is IDisposable) { ((IDisposable)transport).Dispose(); } if (clerk != null) clerk.Dispose(); } }
/// <summary> /// /// Verifies the signature on an enveloped digital signature on a UDDI /// entity, such as a business, service, tmodel or binding template. /// It is expected that either the public key of the signing certificate is /// included within the signature keyinfo section OR that sufficient /// information is provided in the signature to reference a public key /// located within the Trust Store provided. Optionally, this function /// also validate the signing certificate using the options provided to the /// configuration map. /// </summary> /// <param name="obj"></param> /// <param name="OutErrorMessage"></param> /// <returns></returns> public bool verifySignedUddiEntity(Object obj, out String OutErrorMessage) { if (obj == null) { throw new ArgumentNullException("obj"); } string msg = ""; //serialize to string XmlDocument doc = null; if (obj.GetType().Equals(typeof(bindingTemplate))) { PrintUDDI <bindingTemplate> p = new PrintUDDI <bindingTemplate>(); String s = p.print(obj); doc = StringToXmlDocument(s); } if (obj.GetType().Equals(typeof(businessService))) { PrintUDDI <businessService> p = new PrintUDDI <businessService>(); String s = p.print(obj); doc = StringToXmlDocument(s); } if (obj.GetType().Equals(typeof(businessEntity))) { PrintUDDI <businessEntity> p = new PrintUDDI <businessEntity>(); String s = p.print(obj); doc = StringToXmlDocument(s); } if (obj.GetType().Equals(typeof(tModel))) { PrintUDDI <tModel> p = new PrintUDDI <tModel>(); String s = p.print(obj); doc = StringToXmlDocument(s); } //get signing certificate X509Certificate2 signingCert = getSigningCertificatePublicKey(doc); //check timestamps if (map.containsKey(DigSigUtil.CHECK_TIMESTAMPS) && map.getProperty(DigSigUtil.CHECK_TIMESTAMPS).Equals("true", StringComparison.CurrentCultureIgnoreCase)) { if (DateTime.Now < signingCert.NotBefore) { msg += "Signing certificate is not yet valid"; } if (DateTime.Now > signingCert.NotAfter) { msg += "Signing certificate is not yet valid"; } } if (map.containsKey(DigSigUtil.CHECK_TRUST_CHAIN) && map.getProperty(DigSigUtil.CHECK_TRUST_CHAIN).Equals("true", StringComparison.CurrentCultureIgnoreCase)) { //check trust X509Chain chain = new X509Chain(); chain.ChainPolicy.RevocationMode = X509RevocationMode.NoCheck; chain.ChainPolicy.RevocationFlag = X509RevocationFlag.EntireChain; bool r = chain.Build(signingCert); if (!r) { foreach (X509ChainElement element in chain.ChainElements) { msg += ("Element issuer name: " + element.Certificate.Issuer + " is " + element.Certificate.Verify()); } } } //check ocsp //check crl if ((map.containsKey(DigSigUtil.CHECK_REVOCATION_STATUS_OCSP) && map.getProperty(DigSigUtil.CHECK_REVOCATION_STATUS_OCSP).Equals("true", StringComparison.CurrentCultureIgnoreCase)) || (map.containsKey(DigSigUtil.CHECK_REVOCATION_STATUS_CRL) && map.getProperty(DigSigUtil.CHECK_REVOCATION_STATUS_CRL).Equals("true", StringComparison.CurrentCultureIgnoreCase))) { //check trust X509Chain chain = new X509Chain(); chain.ChainPolicy.RevocationMode = X509RevocationMode.Online; chain.ChainPolicy.RevocationFlag = X509RevocationFlag.EntireChain; chain.ChainPolicy.VerificationFlags = X509VerificationFlags.NoFlag; bool r = chain.Build(signingCert); if (!r) { foreach (X509ChainElement element in chain.ChainElements) { msg += ("Element issuer name: " + element.Certificate.Issuer + " is " + element.Certificate.Verify()); } } } //verify crypto (math) String verifytext = ""; bool valid = verifySignature(doc, signingCert, out verifytext); OutErrorMessage = verifytext + msg; return(valid); }
public void findServices() { Console.Out.Write("findServices"); Assert.True(online); find_service fb = new find_service(); fb.name = new name[] { new name(UDDIConstants.WILDCARD, null) }; fb.findQualifiers = new string[] { UDDIConstants.APPROXIMATE_MATCH }; serviceList bl = inquiry.find_service(fb); Assert.NotNull(bl); Assert.NotNull(bl.serviceInfos); Assert.True(bl.serviceInfos.Length > 0); for (int i = 0; i < bl.serviceInfos.Length; i++) { Assert.IsNotNullOrEmpty(bl.serviceInfos[i].businessKey); Assert.IsNotNullOrEmpty(bl.serviceInfos[i].serviceKey); } PrintUDDI<serviceList> p = new PrintUDDI<serviceList>(); if (serialize) Console.Out.WriteLine(p.print(bl)); }
public void findTmodels() { Console.Out.Write("find_tModel"); Assert.True(online); find_tModel fb = new find_tModel(); fb.name = new name(UDDIConstants.WILDCARD, null); fb.findQualifiers = new string[] { UDDIConstants.APPROXIMATE_MATCH }; tModelList bl = inquiry.find_tModel(fb); Assert.NotNull(bl); Assert.NotNull(bl.tModelInfos); Assert.True(bl.tModelInfos.Length > 0); for (int i = 0; i < bl.tModelInfos.Length; i++) { Assert.IsNotNullOrEmpty(bl.tModelInfos[i].tModelKey); Assert.NotNull(bl.tModelInfos[i].name); } PrintUDDI<tModelList> p = new PrintUDDI<tModelList>(); if (serialize) Console.Out.WriteLine(p.print(bl)); }
void SigningAndVerify(object uddielement) { uddielement = ds.signUddiEntity(uddielement); Assert.NotNull(uddielement); if (serialize) { if (uddielement.GetType().Equals(typeof(bindingTemplate))) { PrintUDDI<bindingTemplate> p = new PrintUDDI<bindingTemplate>(); Console.Out.WriteLine(p.print(uddielement)); } if (uddielement.GetType().Equals(typeof(businessService))) { PrintUDDI<businessService> p = new PrintUDDI<businessService>(); Console.Out.WriteLine(p.print(uddielement)); } if (uddielement.GetType().Equals(typeof(businessEntity))) { PrintUDDI<businessEntity> p = new PrintUDDI<businessEntity>(); Console.Out.WriteLine(p.print(uddielement)); } if (uddielement.GetType().Equals(typeof(tModel))) { PrintUDDI<tModel> p = new PrintUDDI<tModel>(); Console.Out.WriteLine(p.print(uddielement)); } } String err=""; bool check=ds.verifySignedUddiEntity(uddielement, out err); Console.Out.WriteLine("Signature status is " + check + ": " + err); Assert.True(check); Assert.True(String.IsNullOrEmpty(err)); validAllSignatureElementsArePresent(uddielement); }
public static void Run(string[] args) { UDDIClient clerkManager = null; Transport transport = null; UDDIClerk clerk = null; try { clerkManager = new UDDIClient("uddi.xml"); transport = clerkManager.getTransport("default"); UDDI_Security_SoapBinding security = transport.getUDDISecurityService(); UDDI_Inquiry_SoapBinding inquiry = transport.getUDDIInquiryService(); UDDI_Publication_SoapBinding publish = transport.getUDDIPublishService(); clerk = clerkManager.getClerk("default"); find_business fb = new find_business(); fb.authInfo = clerk.getAuthToken(security.Url); fb.findQualifiers = new string[] { UDDIConstants.APPROXIMATE_MATCH }; fb.name = new name[1]; fb.name[0] = new name(UDDIConstants.WILDCARD, "en"); businessList bl = inquiry.find_business(fb); if (bl.businessInfos.Length > 0) { Console.Out.WriteLine(bl.businessInfos[0].name[0].Value); Console.Out.WriteLine("attempting to sign"); businessService sd = clerk.getServiceDetail(bl.businessInfos[0].serviceInfos[0].serviceKey); //pist, the signing config comes from the stuff in in uddi.xml DigSigUtil ds = new DigSigUtil(clerkManager.getClientConfig().getDigitalSignatureConfiguration()); businessService signedsvc = (businessService)ds.signUddiEntity(sd); PrintUDDI <businessService> p = new PrintUDDI <businessService>(); Console.Out.WriteLine("signed successfully!"); Console.Out.WriteLine(p.print(signedsvc)); Console.Out.WriteLine("attempting verify and validate"); String err = ""; bool valid = ds.verifySignedUddiEntity(signedsvc, out err); Console.Out.WriteLine("Signature is " + (valid ? "Valid, Yippy!" : "Invalid!") + " msg: " + err); Console.Out.WriteLine("saving"); clerk.register(signedsvc); Console.Out.WriteLine("reloading content from the server..."); get_serviceDetail gsd = new get_serviceDetail(); gsd.authInfo = clerk.getAuthToken(clerk.getUDDINode().getSecurityUrl()); gsd.serviceKey = new string[] { signedsvc.serviceKey }; sd = inquiry.get_serviceDetail(gsd).businessService[0]; Console.Out.WriteLine(p.print(sd)); Console.Out.WriteLine("attempting verify and validate"); err = ""; valid = ds.verifySignedUddiEntity(sd, out err); Console.Out.WriteLine("Signature is " + (valid ? "Valid, Yippy!" : "Invalid!") + " msg: " + err); } else { Console.Out.WriteLine("no businesses were returned!"); } } catch (Exception ex) { while (ex != null) { System.Console.WriteLine("Error! " + ex.Message); ex = ex.InnerException; } } finally { if (transport != null && transport is IDisposable) { ((IDisposable)transport).Dispose(); } if (clerk != null) { clerk.Dispose(); } } }
public static void Run(string[] args) { UDDIClient clerkManager = null; Transport transport = null; UDDIClerk clerk = null; try { clerkManager = new UDDIClient("uddi.xml"); transport = clerkManager.getTransport("default"); UDDI_Security_SoapBinding security = transport.getUDDISecurityService(); UDDI_Inquiry_SoapBinding inquiry = transport.getUDDIInquiryService(); UDDI_Publication_SoapBinding publish = transport.getUDDIPublishService(); clerk = clerkManager.getClerk("default"); find_business fb = new find_business(); fb.authInfo = clerk.getAuthToken(security.Url); fb.findQualifiers = new string[] { UDDIConstants.APPROXIMATE_MATCH }; fb.name = new name[1]; fb.name[0] = new name(UDDIConstants.WILDCARD, "en"); businessList bl = inquiry.find_business(fb); if (bl.businessInfos.Length > 0) { Console.Out.WriteLine(bl.businessInfos[0].name[0].Value); Console.Out.WriteLine("attempting to sign"); businessService sd = clerk.getServiceDetail(bl.businessInfos[0].serviceInfos[0].serviceKey); //pist, the signing config comes from the stuff in in uddi.xml DigSigUtil ds = new DigSigUtil(clerkManager.getClientConfig().getDigitalSignatureConfiguration()); businessService signedsvc = (businessService)ds.signUddiEntity(sd); PrintUDDI<businessService> p = new PrintUDDI<businessService>(); Console.Out.WriteLine("signed successfully!"); Console.Out.WriteLine(p.print(signedsvc)); Console.Out.WriteLine("attempting verify and validate"); String err = ""; bool valid = ds.verifySignedUddiEntity(signedsvc, out err); Console.Out.WriteLine("Signature is " + (valid ? "Valid, Yippy!" : "Invalid!") + " msg: " + err); Console.Out.WriteLine("saving"); clerk.register(signedsvc); Console.Out.WriteLine("reloading content from the server..."); get_serviceDetail gsd = new get_serviceDetail(); gsd.authInfo = clerk.getAuthToken(clerk.getUDDINode().getSecurityUrl()); gsd.serviceKey = new string[] { signedsvc.serviceKey }; sd = inquiry.get_serviceDetail(gsd).businessService[0]; Console.Out.WriteLine(p.print(sd)); Console.Out.WriteLine("attempting verify and validate"); err = ""; valid = ds.verifySignedUddiEntity(sd, out err); Console.Out.WriteLine("Signature is " + (valid ? "Valid, Yippy!" : "Invalid!") + " msg: " + err); } else Console.Out.WriteLine("no businesses were returned!"); } catch (Exception ex) { while (ex != null) { System.Console.WriteLine("Error! " + ex.Message); ex = ex.InnerException; } } finally { if (transport != null && transport is IDisposable) { ((IDisposable)transport).Dispose(); } if (clerk != null) clerk.Dispose(); } }
/// <summary> /// /// Verifies the signature on an enveloped digital signature on a UDDI /// entity, such as a business, service, tmodel or binding template. /// It is expected that either the public key of the signing certificate is /// included within the signature keyinfo section OR that sufficient /// information is provided in the signature to reference a public key /// located within the Trust Store provided. Optionally, this function /// also validate the signing certificate using the options provided to the /// configuration map. /// </summary> /// <param name="obj"></param> /// <param name="OutErrorMessage"></param> /// <returns></returns> public bool verifySignedUddiEntity(Object obj, out String OutErrorMessage) { if (obj == null) { throw new ArgumentNullException("obj"); } string msg = ""; //serialize to string XmlDocument doc = null; if (obj.GetType().Equals(typeof(bindingTemplate))) { PrintUDDI<bindingTemplate> p = new PrintUDDI<bindingTemplate>(); String s = p.print(obj); doc = StringToXmlDocument(s); } if (obj.GetType().Equals(typeof(businessService))) { PrintUDDI<businessService> p = new PrintUDDI<businessService>(); String s = p.print(obj); doc = StringToXmlDocument(s); } if (obj.GetType().Equals(typeof(businessEntity))) { PrintUDDI<businessEntity> p = new PrintUDDI<businessEntity>(); String s = p.print(obj); doc = StringToXmlDocument(s); } if (obj.GetType().Equals(typeof(tModel))) { PrintUDDI<tModel> p = new PrintUDDI<tModel>(); String s = p.print(obj); doc = StringToXmlDocument(s); } //get signing certificate X509Certificate2 signingCert = getSigningCertificatePublicKey(doc); //check timestamps if (map.containsKey(DigSigUtil.CHECK_TIMESTAMPS) && map.getProperty(DigSigUtil.CHECK_TIMESTAMPS).Equals("true", StringComparison.CurrentCultureIgnoreCase)) { if (DateTime.Now < signingCert.NotBefore) { msg += "Signing certificate is not yet valid"; } if (DateTime.Now > signingCert.NotAfter) { msg += "Signing certificate is not yet valid"; } } if (map.containsKey(DigSigUtil.CHECK_TRUST_CHAIN) && map.getProperty(DigSigUtil.CHECK_TRUST_CHAIN).Equals("true", StringComparison.CurrentCultureIgnoreCase)) { //check trust X509Chain chain = new X509Chain(); chain.ChainPolicy.RevocationMode = X509RevocationMode.NoCheck; chain.ChainPolicy.RevocationFlag = X509RevocationFlag.EntireChain; bool r = chain.Build(signingCert); if (!r) { foreach (X509ChainElement element in chain.ChainElements) { msg += ("Element issuer name: " + element.Certificate.Issuer + " is " + element.Certificate.Verify()); } } } //check ocsp //check crl if ((map.containsKey(DigSigUtil.CHECK_REVOCATION_STATUS_OCSP) && map.getProperty(DigSigUtil.CHECK_REVOCATION_STATUS_OCSP).Equals("true", StringComparison.CurrentCultureIgnoreCase)) || (map.containsKey(DigSigUtil.CHECK_REVOCATION_STATUS_CRL) && map.getProperty(DigSigUtil.CHECK_REVOCATION_STATUS_CRL).Equals("true", StringComparison.CurrentCultureIgnoreCase))) { //check trust X509Chain chain = new X509Chain(); chain.ChainPolicy.RevocationMode = X509RevocationMode.Online; chain.ChainPolicy.RevocationFlag = X509RevocationFlag.EntireChain; chain.ChainPolicy.VerificationFlags = X509VerificationFlags.NoFlag; bool r = chain.Build(signingCert); if (!r) { foreach (X509ChainElement element in chain.ChainElements) { msg += ("Element issuer name: " + element.Certificate.Issuer + " is " + element.Certificate.Verify()); } } } //verify crypto (math) String verifytext = ""; bool valid = verifySignature(doc, signingCert, out verifytext); OutErrorMessage = verifytext + msg; return valid; }
/// <summary> /// Digitally signs a UDDI entity, such as a business, service, tmodel or /// binding template using the map to provide certificate key stores and /// credentials. The UDDI entity MUST support XML Digital Signatures /// (tModel, Business, Service, Binding Template) /// </summary> /// <param name="bt"></param> /// <returns></returns> public object signUddiEntity(object bt) { XmlDocument doc = null; if (bt.GetType().Equals(typeof(bindingTemplate))) { PrintUDDI<bindingTemplate> p = new PrintUDDI<bindingTemplate>(); String s = p.print(bt); doc = StringToXmlDocument(s); } if (bt.GetType().Equals(typeof(businessService))) { PrintUDDI<businessService> p = new PrintUDDI<businessService>(); String s = p.print(bt); doc = StringToXmlDocument(s); } if (bt.GetType().Equals(typeof(businessEntity))) { PrintUDDI<businessEntity> p = new PrintUDDI<businessEntity>(); String s = p.print(bt); doc = StringToXmlDocument(s); } if (bt.GetType().Equals(typeof(tModel))) { PrintUDDI<tModel> p = new PrintUDDI<tModel>(); String s = p.print(bt); doc = StringToXmlDocument(s); } X509Certificate2 key = GetKey(); XmlElement sig = SignXml(doc, key); //append the signature to the document doc.ChildNodes[1].AppendChild(sig); String signedXml = doc.OuterXml; if (bt.GetType().Equals(typeof(bindingTemplate))) { PrintUDDI<bindingTemplate> p = new PrintUDDI<bindingTemplate>(); return p.createObject(signedXml); } if (bt.GetType().Equals(typeof(businessService))) { PrintUDDI<businessService> p = new PrintUDDI<businessService>(); return p.createObject(signedXml); } if (bt.GetType().Equals(typeof(businessEntity))) { PrintUDDI<businessEntity> p = new PrintUDDI<businessEntity>(); return p.createObject(signedXml); } if (bt.GetType().Equals(typeof(tModel))) { PrintUDDI<tModel> p = new PrintUDDI<tModel>(); return p.createObject(signedXml); } return bt; }