Я создал самозаверяющий сертификат в хранилище ключей 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 отсутствует.