Пример #1
0
        public void TestSetupCertificateValidation_Amqp_ShouldSucceed()
        {
            ITransportSettings[] transportSettings = new ITransportSettings[] { new AmqpTransportSettings(TransportType.Amqp_Tcp_Only) };
            var certs = TrustBundleProvider.ParseCertificates(certificatesString);
            var customCertificateValidator = CustomCertificateValidator.Create(certs, transportSettings);

            Assert.IsNotNull(((AmqpTransportSettings)transportSettings[0]).RemoteCertificateValidationCallback);
        }
Пример #2
0
        public void TestSetupCertificateValidation_Amqp_CallbackAlreadySet_ShouldSucceed()
        {
            var certs = TrustBundleProvider.ParseCertificates(certificatesString);

            var setting = new AmqpTransportSettings(TransportType.Amqp_Tcp_Only);
            RemoteCertificateValidationCallback callback = (sender, certificate, chain, sslPolicyErrors) =>
            {
                return(true);
            };

            setting.RemoteCertificateValidationCallback = callback;
            ITransportSettings[] transportSettings = new ITransportSettings[] { setting };
            var customCertificateValidator         = CustomCertificateValidator.Create(certs, transportSettings);

            Assert.IsNotNull(((AmqpTransportSettings)transportSettings[0]).RemoteCertificateValidationCallback);
        }
Пример #3
0
        public void TestSetupCertificateValidation_Mqtt_CallbackAlreadySet_ShouldSucceed()
        {
            var trustBundleProvider = new TrustBundleProvider();
            var certs = trustBundleProvider.ParseCertificates(certificatesString);

            var setting = new MqttTransportSettings(TransportType.Mqtt_Tcp_Only);
            RemoteCertificateValidationCallback callback = (sender, certificate, chain, sslPolicyErrors) =>
            {
                return(true);
            };

            setting.RemoteCertificateValidationCallback = callback;
            ITransportSettings[] transportSettings = new ITransportSettings[] { setting };
            var customCertificateValidator         = CustomCertificateValidator.Create(certs, transportSettings);

            Assert.AreEqual(setting.RemoteCertificateValidationCallback, callback);
        }
Пример #4
0
        public static RegisterGatewayResult RegisterGateway(
            string managementServerUrl,
            string managementCertificateThumbprint,
            string managementAccountName,
            string managementAccountPassword,
            NetbiosName gatewayNetbiosName,
            X509Certificate2 gatewayCertificate)
        {
            Contract.Requires(!managementServerUrl.IsNullOrWhiteSpace());
            Contract.Requires(!managementCertificateThumbprint.IsNullOrWhiteSpace());
            Contract.Requires(!managementAccountName.IsNullOrWhiteSpace());
            Contract.Requires(!managementAccountPassword.IsNullOrWhiteSpace());
            Contract.Requires(gatewayNetbiosName != null);
            Contract.Requires(gatewayCertificate != null);

            using (var webRequestHandler = new WebRequestHandler())
            {
                webRequestHandler.ServerCertificateValidationCallback = (sender, certificate, chain, errors) =>
                {
                    var customCertificateValidator = new CustomCertificateValidator(managementCertificateThumbprint);
                    customCertificateValidator.Validate(new X509Certificate2(certificate));
                    return(true);
                };
                using (var httpClient = new HttpClient(webRequestHandler))
                {
                    var managementUrl = $"{managementServerUrl}/Api";
                    try
                    {
                        var loginResponse = PostAsync <ManagementLoginResponse>(
                            httpClient,
                            $"{managementUrl}/Authentication/Login",
                            new ManagementLoginRequest
                        {
                            AccountName = managementAccountName,
                            Password    = managementAccountPassword,
                        }).Result;
                        if (loginResponse.Status != ManagementLoginResponseStatus.Success)
                        {
                            return(new RegisterGatewayResult(RegisterGatewayResultStatus.FailedAuthentication));
                        }

                        var gatewayConfiguration = PostAsync <GatewayConfiguration>(
                            httpClient,
                            $"{managementUrl}/SystemProfiles/Gateways/{gatewayNetbiosName}",
                            new RegisterGatewayRequest
                        {
                            Certificate = gatewayCertificate,
                            Version     = GeneralInformation.FileVersion
                        }).Result;
                        return(new RegisterGatewayResult(gatewayConfiguration));
                    }
                    catch (Exception exception)
                    {
                        if (exception.InnerException is HttpRequestException)
                        {
                            if (exception.InnerException.InnerException is WebException)
                            {
                                return(new RegisterGatewayResult(
                                           RegisterGatewayResultStatus.FailedConnectivity,
                                           exception.ToString()));
                            }
                            return(new RegisterGatewayResult(
                                       RegisterGatewayResultStatus.FailedInternal,
                                       exception.ToString()));
                        }
                        return(new RegisterGatewayResult(
                                   RegisterGatewayResultStatus.Failed,
                                   exception.ToString()));
                    }
                }
            }
        }