Я создал самозаверяющий сертификат в Azure Key Vault, используя следующий метод:
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 отсутствует.
non-exportable
в своей политике. Дополнительные сведения см. на странице docs.microsoft.com/en-us/azure/key-vault/. - person Jim Xu   schedule 09.10.2019RS256
. Получив подпись, используйте ее для создания окончательного сертификата. Для получения дополнительной информации вы можете начать с tools.ietf.org/html/rfc5280. Однако то, что вы спрашиваете, необычно, потому что ваш корневой самозаверяющий сертификат не пользуется широким доверием. Но я вижу сценарии, в которых это может быть полезно. - person fernacolo   schedule 24.04.2020