Почему в свойстве CertificateExtensions сертификата CertificateRequest нет расширений? ⇐ C#
-
Anonymous
Почему в свойстве CertificateExtensions сертификата CertificateRequest нет расширений?
Я добавляю расширение SAN в свой CSR
public CertificateRequest GenerateCSR (строка subjectName, List ipAddresses, out RSA rsaKeyPair) { если (ipAddresses == ноль) { бросить новое ArgumentNullException(nameof(ipAddresses)); } _logger.LogInformation("Начинаем создание CSR для субъекта: {SubjectName}", subjectName); rsaKeyPair = RSA.Create(2048); _logger.LogDebug("Пара ключей RSA успешно сгенерирована с размером ключа {KeySize}.", rsaKeyPair.KeySize); вар субъект = новый X500DistinguishedName (имя субъекта); вар csr = новый CertificateRequest (субъект, rsaKeyPair, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1); _logger.LogDebug("Тема CSR: {CSRSubject}", csr.SubjectName.Name); вар sanBuilder = новый ObjectAlternativeNameBuilder (); foreach (var ipAddress в ipAddresses) { sanBuilder.AddIpAddress(IPAddress.Parse(ipAddress)); } вар sanExtension = sanBuilder.Build(); csr.CertificateExtensions.Add(sanExtension); _logger.LogDebug("Добавлено расширение альтернативного имени субъекта с IP-адресами {SANCount}.", ipAddresses.Count); foreach (расширение var в csr.CertificateExtensions) { вар asnData = новый AsnEncodedData(extension.Oid, Extension.RawData); вар formattedData = asnData.Format(истина); _logger.LogDebug("Расширение CSR: {ExtensionOid} - {ExtensionFriendlyName} - {ExtensionFormattedData}", Extension.Oid?.Value ?? "Unknown", Extension.Oid?.FriendlyName ?? "Unknown", formattedData); } _logger.LogInformation("CSR успешно сгенерирован для субъекта: {SubjectName}.", subjectName); вернуть csr; } Какие логи и OpenSSL успешно уведомляют об этом.
Атрибуты: Запрошенные расширения: X509v3 Альтернативное имя субъекта: IP-адрес: 192.168.5.122 Затем я передаю CSR через SignalR на сервер, и он генерирует сертификат и подписывает его ключом внутреннего центра сертификации
public X509Certificate2 GenerateCertificateFromCSR(byte[] csrBytes) { если (csrBytes == ноль) { бросить новое ArgumentNullException(nameof(csrBytes)); } вар csr = CertificateRequest.LoadSigningRequest(csrBytes, HashAlgorithmName.SHA256); используя var caCertificate = новый X509Certificate2(_settings.PfxPath, _settings.PfxPassword); вар subjectName = новый X500DistinguishedName (caCertificate.SubjectName); var SignatureGenerator = X509SignatureGenerator.CreateForRSA(caCertificate.GetRSAPrivateKey(), RSASignaturePadding.Pkcs1); вар notBefore = DateTimeOffset.UtcNow; вар notAfter = DateTimeOffset.UtcNow.AddYears(1); вар серийный номер = GenerateSerialNumber (); вар сертификат = csr.Create (имя субъекта, SignatureGenerator, notBefore, notAfter, серийный номер); foreach (расширение var в csr.CertificateExtensions) { вар asnData = новый AsnEncodedData(extension.Oid, Extension.RawData); вар formattedData = asnData.Format(истина); _logger.LogDebug("Расширение CSR: {ExtensionOid} - {ExtensionFriendlyName} - {ExtensionFormattedData}", Extension.Oid?.Value ?? "Unknown", Extension.Oid?.FriendlyName ?? "Unknown", formattedData); сертификат.Расширения.Добавить(расширение); } сертификат возврата; } Но при добавлении расширений в журналах нет сообщения, и расширений нет в итоговом сертификате. При этом сам сертификат правильный. Как такое может быть?
Не предлагайте использовать BouncyCastle, наоборот, я стараюсь от него отказаться.
Я добавляю расширение SAN в свой CSR
public CertificateRequest GenerateCSR (строка subjectName, List ipAddresses, out RSA rsaKeyPair) { если (ipAddresses == ноль) { бросить новое ArgumentNullException(nameof(ipAddresses)); } _logger.LogInformation("Начинаем создание CSR для субъекта: {SubjectName}", subjectName); rsaKeyPair = RSA.Create(2048); _logger.LogDebug("Пара ключей RSA успешно сгенерирована с размером ключа {KeySize}.", rsaKeyPair.KeySize); вар субъект = новый X500DistinguishedName (имя субъекта); вар csr = новый CertificateRequest (субъект, rsaKeyPair, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1); _logger.LogDebug("Тема CSR: {CSRSubject}", csr.SubjectName.Name); вар sanBuilder = новый ObjectAlternativeNameBuilder (); foreach (var ipAddress в ipAddresses) { sanBuilder.AddIpAddress(IPAddress.Parse(ipAddress)); } вар sanExtension = sanBuilder.Build(); csr.CertificateExtensions.Add(sanExtension); _logger.LogDebug("Добавлено расширение альтернативного имени субъекта с IP-адресами {SANCount}.", ipAddresses.Count); foreach (расширение var в csr.CertificateExtensions) { вар asnData = новый AsnEncodedData(extension.Oid, Extension.RawData); вар formattedData = asnData.Format(истина); _logger.LogDebug("Расширение CSR: {ExtensionOid} - {ExtensionFriendlyName} - {ExtensionFormattedData}", Extension.Oid?.Value ?? "Unknown", Extension.Oid?.FriendlyName ?? "Unknown", formattedData); } _logger.LogInformation("CSR успешно сгенерирован для субъекта: {SubjectName}.", subjectName); вернуть csr; } Какие логи и OpenSSL успешно уведомляют об этом.
Атрибуты: Запрошенные расширения: X509v3 Альтернативное имя субъекта: IP-адрес: 192.168.5.122 Затем я передаю CSR через SignalR на сервер, и он генерирует сертификат и подписывает его ключом внутреннего центра сертификации
public X509Certificate2 GenerateCertificateFromCSR(byte[] csrBytes) { если (csrBytes == ноль) { бросить новое ArgumentNullException(nameof(csrBytes)); } вар csr = CertificateRequest.LoadSigningRequest(csrBytes, HashAlgorithmName.SHA256); используя var caCertificate = новый X509Certificate2(_settings.PfxPath, _settings.PfxPassword); вар subjectName = новый X500DistinguishedName (caCertificate.SubjectName); var SignatureGenerator = X509SignatureGenerator.CreateForRSA(caCertificate.GetRSAPrivateKey(), RSASignaturePadding.Pkcs1); вар notBefore = DateTimeOffset.UtcNow; вар notAfter = DateTimeOffset.UtcNow.AddYears(1); вар серийный номер = GenerateSerialNumber (); вар сертификат = csr.Create (имя субъекта, SignatureGenerator, notBefore, notAfter, серийный номер); foreach (расширение var в csr.CertificateExtensions) { вар asnData = новый AsnEncodedData(extension.Oid, Extension.RawData); вар formattedData = asnData.Format(истина); _logger.LogDebug("Расширение CSR: {ExtensionOid} - {ExtensionFriendlyName} - {ExtensionFormattedData}", Extension.Oid?.Value ?? "Unknown", Extension.Oid?.FriendlyName ?? "Unknown", formattedData); сертификат.Расширения.Добавить(расширение); } сертификат возврата; } Но при добавлении расширений в журналах нет сообщения, и расширений нет в итоговом сертификате. При этом сам сертификат правильный. Как такое может быть?
Не предлагайте использовать BouncyCastle, наоборот, я стараюсь от него отказаться.
Мобильная версия