Создание сертификата в хранилище ключей Azure с использованием самозаверяющего сертификата хранилища ключей - PullRequest
0 голосов
/ 04 октября 2019

Я создал самозаверяющий сертификат в хранилище ключей Azure, используя следующий метод:

        public void CreateRootCertificate()
        {
            var certPolicy = new CertificatePolicy();
            certPolicy.Attributes = new CertificateAttributes();
            certPolicy.Attributes.NotBefore = DateTime.Now;
            certPolicy.Attributes.Expires = DateTime.Now.AddDays(1);
            certPolicy.IssuerParameters = new IssuerParameters()
            {
                Name = "Self",
            };
            certPolicy.KeyProperties = new KeyProperties(true);
            certPolicy.SecretProperties = new SecretProperties();
            certPolicy.X509CertificateProperties = new X509CertificateProperties()
            {
                Subject = "CN=testyMcTesterson",
            };
            var operation = this.client.CreateCertificateAsync(keyVaultUrl, testRootName, certPolicy);
            operation.Wait();
        }

Теперь, после создания самозаверяющего сертификата, я хочу подписать другие сертификаты, используя этот. Единственное предостережение: я хотел бы сделать это без необходимости извлекать закрытый ключ из хранилища ключей. Это вообще возможно? Я пробовал несколько вариантов следующего метода:

        public void CreateSignedCertificate()
        {
            var certPolicy = new CertificatePolicy();
            certPolicy.Attributes = new CertificateAttributes();
            certPolicy.Attributes.NotBefore = DateTime.Now;
            certPolicy.Attributes.Expires = DateTime.Now.AddDays(1);
            certPolicy.IssuerParameters = new IssuerParameters()
            {
                Name = "CN=testyMcTesterson"
            };
            certPolicy.KeyProperties = new KeyProperties(true);
            certPolicy.SecretProperties = new SecretProperties();
            certPolicy.X509CertificateProperties = new X509CertificateProperties()
            {
                Subject = "CN=testyJunior",
            };
            var operation = this.client.CreateCertificateAsync(keyVaultUrl, "testyJunior", certPolicy);
            operation.Wait();
        }

Это включает в себя установку эмитента на "testyMcTesterson" без CN=, установку его в качестве идентификатора сертификата хранилища ключей и секрета хранилища ключей. Я бы хотел настроить его так, чтобы только хранилище ключей сертификата .cer никогда не покинуло хранилище ключей. Все они выбрасывают 400 исключений, говоря, что свойство IssuerParameters.Name недопустимо. Я понимаю, что, скорее всего, мне не хватает некоторых EKU на корне и на клиенте, но проблема, которую я сейчас пытаюсь решить, заключается в том, чтобы выяснить, возможен ли этот сценарий. Документация по классу IssuerParameters отсутствует.

...