Пример #1
0
        public void InitializedAdministrators()
        {
            CertificateIssuer issuer = new CertificateIssuer("test")
            {
                AccountId             = "accountId",
                AdministratorContacts =
                {
                    new AdministratorContact
                    {
                        Email = "*****@*****.**",
                    },
                },
            };

            using JsonStream json = new JsonStream();
            using (Utf8JsonWriter writer = json.CreateWriter())
            {
                writer.WriteStartObject();

                ((IJsonSerializable)issuer).WriteProperties(writer);

                writer.WriteEndObject();
            }

            Assert.AreEqual(@"{""credentials"":{""account_id"":""accountId""},""org_details"":{""admin_details"":[{""email"":""*****@*****.**""}]}}", json.ToString());
        }
        public async Task VerifyGetPropertiesOfIssuersAsync()
        {
            string issuerName  = Recording.GenerateId();
            string issuerName1 = Recording.GenerateId();

            string providerName  = "ssladmin";
            string providerName1 = "onecert";

            CertificateIssuer issuer  = new CertificateIssuer(issuerName, providerName);
            CertificateIssuer issuer1 = new CertificateIssuer(issuerName1, providerName1);

            RegisterForCleanupIssuer(issuerName);
            RegisterForCleanupIssuer(issuerName1);

            await Client.CreateIssuerAsync(issuer);

            await Client.CreateIssuerAsync(issuer1);

            List <IssuerProperties> issuerProperties = await Client.GetPropertiesOfIssuersAsync().ToEnumerableAsync();

            foreach (IssuerProperties issuerPropertie in issuerProperties)
            {
                Assert.NotNull(issuerPropertie);
                IssuerProperties returnPropertie = issuerProperties.Single(s => s.Id == issuerPropertie.Id);
                Assert.AreEqual(issuerPropertie.Provider, returnPropertie.Provider);
                // TODO: https://github.com/Azure/azure-sdk-for-net/issues/10908
                // https://github.com/Azure/azure-sdk-for-net/issues/10905
                // Assert.AreEqual(issuerPropertie.Name, returnPropertie.Name);
            }
        }
        public async Task VerifyGetIssuer()
        {
            string issuerName = Recording.GenerateId();

            string providerName = "ssladmin";

            CertificateIssuer issuer = new CertificateIssuer(issuerName, providerName)
            {
                AdministratorContacts =
                {
                    new AdministratorContact
                    {
                        Email     = "*****@*****.**",
                        FirstName = "fName",
                        LastName  = "lName",
                        Phone     = "1234"
                    },
                },
            };

            RegisterForCleanupIssuer(issuerName);

            await Client.CreateIssuerAsync(issuer);

            CertificateIssuer getIssuer = await Client.GetIssuerAsync(issuerName);

            Assert.NotNull(getIssuer);
            Assert.NotNull(getIssuer.Id);
            Assert.AreEqual(issuer.Provider, getIssuer.Provider);
            // TODO: https://github.com/Azure/azure-sdk-for-net/issues/10908
            // https://github.com/Azure/azure-sdk-for-net/issues/10905
            // Assert.AreEqual(issuer.Name, getIssuer.Name);
        }
        public void NameDeSerialization()
        {
            const string name      = "2100662614";
            Uri          id        = new Uri($"https://some.vault.azure.net/certificates/issuers/{name}");
            const string accountId = "accountId";
            const string firstName = "fName";
            const string lastName  = "lName";
            const string email     = "*****@*****.**";
            const string phone     = "123-123-1234";

            string expectedJson = $@"{{""id"":""{id.AbsoluteUri}"",""provider"":""ssladmin"",""credentials"":{{""account_id"":""{accountId}""}},""org_details"":{{""zip"":0,""admin_details"":[{{""first_name"":""{firstName}"",""last_name"":""{lastName}"",""email"":""{email}"",""phone"":""{phone}""}}]}},""attributes"":{{""enabled"":true,""created"":1592839861,""updated"":1592839861}}}}";

            // De-Serialze the CertificateIssuer.
            var jDoc = JsonDocument.Parse(expectedJson);
            CertificateIssuer deserializedIssuer = new CertificateIssuer();

            ((IJsonDeserializable)deserializedIssuer).ReadProperties(jDoc.RootElement);

            // Assert that the CertificateIssuer was de-serialized properly.
            Assert.That(deserializedIssuer.Id, Is.EqualTo(id));
            Assert.That(deserializedIssuer.Name, Is.EqualTo(name));
            Assert.That(deserializedIssuer.AccountId, Is.EqualTo(accountId));
            Assert.That(deserializedIssuer.AdministratorContacts[0].Email, Is.EqualTo(email));
            Assert.That(deserializedIssuer.AdministratorContacts[0].FirstName, Is.EqualTo(firstName));
            Assert.That(deserializedIssuer.AdministratorContacts[0].LastName, Is.EqualTo(lastName));
            Assert.That(deserializedIssuer.AdministratorContacts[0].Phone, Is.EqualTo(phone));
        }
        public async Task IssueCertificateTest()
        {
            var serialNumberGenerator = new SerialNumberGenerator(Configuration.StorageConnectionString, Configuration.StorageContainerName);
            var issuer = new CertificateIssuer(_client, Configuration.RootCertificateId, serialNumberGenerator);

            X509Certificate2 certificate = await issuer.IssueCertificateAsync("Test Certificate", GeneratePublicKeyParameters());

            Assert.Equal("CN=Test Certificate", certificate.Subject);
        }
        public async Task VerifyCertificateOperationError()
        {
            string issuerName = Recording.GenerateId();
            string certName   = Recording.GenerateId();

            CertificateIssuer certIssuer = new CertificateIssuer(issuerName, "DigiCert")
            {
                AccountId      = "test",
                Password       = "******",
                OrganizationId = "test",
            };

            await Client.CreateIssuerAsync(certIssuer);

            CertificateOperation operation = null;

            try
            {
                CertificatePolicy certificatePolicy = DefaultPolicy;
                certificatePolicy.IssuerName = issuerName;

                operation = await Client.StartCreateCertificateAsync(certName, certificatePolicy);

                operation = InstrumentOperation(operation);

                RegisterForCleanup(certName);

                using CancellationTokenSource cts = new CancellationTokenSource(TimeSpan.FromMinutes(2));
                TimeSpan pollingInterval = Mode == RecordedTestMode.Playback ? TimeSpan.Zero : KeyVaultTestEnvironment.DefaultPollingInterval;

                while (!operation.HasCompleted)
                {
                    await Task.Delay(pollingInterval, cts.Token);

                    await operation.UpdateStatusAsync(cts.Token);
                }

                InvalidOperationException ex = Assert.Throws <InvalidOperationException>(() => { KeyVaultCertificateWithPolicy cert = operation.Value; });
                StringAssert.StartsWith("The certificate operation failed: ", ex.Message);

                Assert.IsTrue(operation.HasCompleted);
                Assert.IsFalse(operation.HasValue);
                Assert.AreEqual(200, operation.GetRawResponse().Status);
                Assert.AreEqual("failed", operation.Properties.Status);
            }
            catch (TaskCanceledException) when(operation != null)
            {
                Assert.Inconclusive("Timed out while waiting for operation {0}", operation.Id);
            }
            finally
            {
                await Client.DeleteIssuerAsync(issuerName);
            }
        }
Пример #7
0
        public void UpdateIssuerArgumentValidation()
        {
            ArgumentException ex = Assert.ThrowsAsync <ArgumentNullException>(() => Client.UpdateIssuerAsync(null));

            Assert.AreEqual("issuer", ex.ParamName);

            CertificateIssuer issuer = new CertificateIssuer();

            ex = Assert.ThrowsAsync <ArgumentException>(() => Client.UpdateIssuerAsync(issuer));
            Assert.AreEqual("issuer", ex.ParamName);
            StringAssert.StartsWith("issuer.Name cannot be null or an empty string.", ex.Message);
        }
        public void InitializedAdministrators()
        {
            const string      expectedJson = @"{""provider"":""provider"",""credentials"":{""account_id"":""accountId""},""org_details"":{""admin_details"":[{""first_name"":""fName"",""last_name"":""lName"",""email"":""*****@*****.**"",""phone"":""1234""}]}}";
            CertificateIssuer issuer       = new CertificateIssuer("test", "provider")
            {
                AccountId             = "accountId",
                AdministratorContacts =
                {
                    new AdministratorContact
                    {
                        Email     = "*****@*****.**",
                        FirstName = "fName",
                        LastName  = "lName",
                        Phone     = "1234"
                    },
                },
            };

            // Serialize the CertificateIssuer.
            using JsonStream json = new JsonStream();
            using (Utf8JsonWriter writer = json.CreateWriter())
            {
                writer.WriteStartObject();

                ((IJsonSerializable)issuer).WriteProperties(writer);

                writer.WriteEndObject();
            }

            // Assert that the CertificateIssuer was serialized properly.
            Assert.That(expectedJson, Is.EqualTo(json.ToString()));

            // De-Serialze the CertificateIssuer.
            var jDoc = JsonDocument.Parse(expectedJson);
            CertificateIssuer deserializedIssuer = new CertificateIssuer();

            ((IJsonDeserializable)deserializedIssuer).ReadProperties(jDoc.RootElement);

            // Assert that the CertificateIssuer was de-serialized properly.
            Assert.That(deserializedIssuer.AccountId, Is.EqualTo(issuer.AccountId));
            Assert.That(deserializedIssuer.AdministratorContacts[0].Email, Is.EqualTo(issuer.AdministratorContacts[0].Email));
            Assert.That(deserializedIssuer.AdministratorContacts[0].FirstName, Is.EqualTo(issuer.AdministratorContacts[0].FirstName));
            Assert.That(deserializedIssuer.AdministratorContacts[0].LastName, Is.EqualTo(issuer.AdministratorContacts[0].LastName));
            Assert.That(deserializedIssuer.AdministratorContacts[0].Phone, Is.EqualTo(issuer.AdministratorContacts[0].Phone));
        }
Пример #9
0
        public void UninitializedAdministrators()
        {
            CertificateIssuer issuer = new CertificateIssuer("test")
            {
                AccountId = "accountId",
            };

            using JsonStream json = new JsonStream();
            using (Utf8JsonWriter writer = json.CreateWriter())
            {
                writer.WriteStartObject();

                ((IJsonSerializable)issuer).WriteProperties(writer);

                writer.WriteEndObject();
            }

            Assert.AreEqual(@"{""credentials"":{""account_id"":""accountId""}}", json.ToString());
        }
Пример #10
0
        public async Task VerifyGetIssuer()
        {
            string issuerName = Recording.GenerateId();

            string providerName = "ssladmin";

            CertificateIssuer issuer = new CertificateIssuer(issuerName, providerName);

            RegisterForCleanupIssuer(issuerName);

            await Client.CreateIssuerAsync(issuer);

            CertificateIssuer getIssuer = await Client.GetIssuerAsync(issuerName);

            Assert.NotNull(getIssuer);
            Assert.NotNull(getIssuer.Id);
            Assert.AreEqual(issuer.Provider, getIssuer.Provider);
            // TODO: https://github.com/Azure/azure-sdk-for-net/issues/10908
            // https://github.com/Azure/azure-sdk-for-net/issues/10905
            // Assert.AreEqual(issuer.Name, getIssuer.Name);
        }
        public async Task VerifyUpdateIssuer()
        {
            string issuerName = Recording.GenerateId();

            string providerName = "ssladmin";

            CertificateIssuer issuer = new CertificateIssuer(issuerName, providerName);

            RegisterForCleanupIssuer(issuerName);

            await Client.CreateIssuerAsync(issuer);

            string updateProvider = "onecert";

            issuer = new CertificateIssuer(issuerName, updateProvider);
            Assert.NotNull(issuer);

            CertificateIssuer updateIssuer = await Client.UpdateIssuerAsync(issuer);

            Assert.NotNull(updateIssuer);
            Assert.NotNull(updateIssuer.UpdatedOn);
            Assert.AreEqual(updateProvider, updateIssuer.Provider);
        }
Пример #12
0
        public byte[] Get()
        {
            try
            {
                var path = Path.Combine(Directory.GetCurrentDirectory(), "Certificates\\DevCertRootCA.pfx");

                Certificate ca = Certificate.LoadPfx(path, "", KeySetOptions.MachineKeySet);

                // prepare certificate info
                var info = new CertificateInfo();

                // specify certificate validity range
                info.EffectiveDate  = DateTime.Now.AddDays(-1);
                info.ExpirationDate = info.EffectiveDate.AddYears(1);

                // specify certificate subject for a client certificate
                info.Subject = new DistinguishedName("CN=Sample Certificate");

                // specify certificate usage for a client certificate
                info.Usage = KeyUses.DigitalSignature | KeyUses.KeyEncipherment | KeyUses.DataEncipherment;

                // specify certificate extended usage for a client certificate
                info.SetExtendedUsage(ExtendedUsageOids.ClientAuthentication, ExtendedUsageOids.EmailProtection);

                // sets a unique serial number
                info.SetSerialNumber(Guid.NewGuid().ToByteArray());

                // use SHA-256 signature algorithm
                info.SignatureHashAlgorithm = HashingAlgorithmId.SHA256;

                // generate a 2048-bit RSA key for the certificate
                PrivateKeyInfo privateKey;
                using (var alg = new AsymmetricKeyAlgorithm())
                {
                    alg.GenerateKey(AsymmetricKeyAlgorithmId.RSA, 2048);
                    privateKey = alg.GetPrivateKey();
                }

                // create the certificate signed by the CA certificate
                PublicKeyInfo publicKey   = privateKey.GetPublicKey();
                Certificate   certificate = CertificateIssuer.Issue(ca, info, publicKey);

                // associate the private key with the certificate
                certificate.Associate(privateKey);

                using (CertificateStore store = new CertificateStore(CertificateStoreName.My, CertificateStoreLocation.LocalMachine))
                {
                    store.Add(certificate);
                }

                using (CertificateStore store = new CertificateStore(CertificateStoreName.TrustedPeople, CertificateStoreLocation.LocalMachine))
                {
                    store.Add(certificate);
                }

                var memoryStream = new MemoryStream();
                certificate.Save(memoryStream, CertificateFormat.Pfx);
                return(memoryStream.ToArray());
            } catch (Exception ex)
            {
                _logger.LogError(ex.Message);
                throw ex;
            }
        }