예제 #1
0
        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));
            }
        }
예제 #2
0
        /// <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);
        }
예제 #3
0
        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));
            }
        }
예제 #4
0
        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();
            }
        }
예제 #6
0
        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();
                }
            }
        }
예제 #8
0
        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();
            }
        }
예제 #9
0
        /// <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);
        }
예제 #10
0
 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));
 }
예제 #11
0
 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));
 }
예제 #12
0
        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);
        }
예제 #13
0
        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();
                }
            }
        }
예제 #14
0
        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();
            }
        }
예제 #15
0
        /// <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;
        }
예제 #16
0
        /// <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;
        }