Я получил великолепный ответ о создании самозаверяющего сертификата для использования субъектами Azure по адресу Создание самозаверяющего сертификата без внешних библиотек превосходным bartonjs.
Ниже приведен практически код, представленный в образце Azure. Однако я застрял на том, как можно изменить алгоритм подписи? Кажется, по умолчанию это SHA-1, я могу ошибаться, но, возможно, это должно быть явно установлено на что-то еще, например SHA-256.
public static X509Certificate2 CreateSelfSignedRsaCertificate(string subjectName, string friendlyName)
{
if(subjectName == null)
{
throw new ArgumentNullException(nameof(subjectName));
}
if(friendlyName == null)
{
throw new ArgumentNullException(nameof(friendlyName));
}
var keyParams = new CngKeyCreationParameters();
keyParams.Parameters.Add(new CngProperty("Length", BitConverter.GetBytes(2048), CngPropertyOptions.Persist));
using(var rsaKey = CngKey.Create(CngAlgorithm.Rsa, Guid.NewGuid().ToString(), keyParams))
{
using(RSA rsa = new RSACng(rsaKey))
{
var certRequest = new CertificateRequest(subjectName, rsa, HashAlgorithmName.SHA512, RSASignaturePadding.Pkcs1);
//Explicitly not a CA.
certRequest.CertificateExtensions.Add(new X509BasicConstraintsExtension(false, false, 0, false));
certRequest.CertificateExtensions.Add(new X509KeyUsageExtension(X509KeyUsageFlags.DigitalSignature | X509KeyUsageFlags.KeyEncipherment, true));
//TLS Server EKU.
certRequest.CertificateExtensions.Add(new X509EnhancedKeyUsageExtension(new OidCollection { new Oid("1.3.6.1.5.5.7.3.1") }, false));
//SubjectAlternativeName extension.
var sanBuilder = new SubjectAlternativeNameBuilder();
sanBuilder.AddDnsName("localhost");
certRequest.CertificateExtensions.Add(sanBuilder.Build());
DateTimeOffset now = DateTimeOffset.UtcNow;
var certificate = certRequest.CreateSelfSigned(notBefore: now, notAfter: now.AddDays(1)/*now.AddDays(365.25)*/);
certificate.FriendlyName = friendlyName;
return certificate;
}
}
}
Thumbprint
по-прежнему будет SHA-1, поскольку отпечаток определяется как SHA-1 подписанного сертификата. - person bartonjs   schedule 27.08.2017certlm
задолго до прошлой ночи. Третья нижняя точка говорит об алгоритме подписи на моем языке (не на английском), поэтому я предположил, что он будет использоваться при подписи. Я думаю, что это отвечает на него. Есть еще один алгоритм хеширования подписи, который называется sha512, и третий алгоритм хеширования подписи, который называется sha512rsa. Вроде тогда все хорошо. - person Veksi   schedule 27.08.2017