Я пытаюсь использовать Certes для генерации SSL-сертификата , мне удалось собрать воедино код из различных примеров и, похоже, добиться определенного прогресса. Мой код выглядит следующим образом:
public static async Task GenerateSSL(
string companyName,
string organizationalUnit,
string locality,
string state,
string countryCode,
string email,
IList<string> domains,
string pem,
string password)
{
var accountKey = KeyFactory.FromPem(pem);
var acme = new AcmeContext(WellKnownServers.LetsEncryptV2, accountKey);
var order = await acme.NewOrder(domains.ToList());
var authorizations = await order.Authorizations();
//get all of the authorizations
foreach (var auths in authorizations)
{
var dnsChallenge = await auths.Dns();
var dnsTxt = acme.AccountKey.DnsTxt(dnsChallenge.Token);
//Set DNS settings
Console.WriteLine(dnsTxt);
await dnsChallenge.Validate();
var resource = await auths.Resource();
while (resource.Status != AuthorizationStatus.Valid)
{
await Task.Delay(1000);
if (resource.Status == AuthorizationStatus.Invalid)
{
break;
}
}
}
//create the private key
var privateKey = KeyFactory.NewKey(KeyAlgorithm.ES256);
var csr = new CertificationRequestBuilder();
string commonNames = string.Join(",", domains.Select(o => $"CN={o}"));
string subject = $"C={countryCode}, ST={state}, L={locality}, O={companyName}, OU={organizationalUnit}, {commonNames}, emailAddress={email}\"";
csr.AddName(subject);
foreach (var domain in domains)
csr.SubjectAlternativeNames.Add(domain);
//get the cert(s)
await order.Finalize(csr.Generate());
var cert = await order.Download();
var certPem = cert.ToPem();
var pfxBuilder = cert.ToPfx(privateKey);
var pfx = pfxBuilder.Build(domains.First(), password);
System.IO.File.WriteAllBytes($@"C:\temp\cert\output.pfx", pfx);
}
Однако, хотя этот код, кажется, работает успешно, когда я использую его для генерации одного сертификата для поддоменов или доменов Apex, он, похоже, дает сбой при создании сертификата с подстановочные знаки.
В частности, когда я могу успешно сгенерировать свой сертификат и загрузить его на свой сервер (вместе с привязками настройки), когда я пытаюсь получить доступ к сайту, я получаю ошибку:
Этот сайт не может быть достигнут. Соединение было сброшено.
Еще раз отмечу, что сертификаты без подстановочных знаков, похоже, работают правильно для меня.
Поэтому мне интересно, может кто-нибудь предоставить какие-либо сведения о том, как исправить этот код, чтобы я мог правильно генерировать сертификаты с подстановочными знаками, которые также поддерживают домен Apex? Я предполагаю, что что-то напутал с тем, как я настраиваю CN и SubjectAlternativeNames.