Создайте сертификат X.509 с расширением идентификатора ключа центра на C#, используя CERTEnroll.dll.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Создайте сертификат X.509 с расширением идентификатора ключа центра на C#, используя CERTEnroll.dll.

Сообщение Anonymous »

Для устаревшего приложения .NET Framework мне нужно создать самозаверяющий сертификат с помощью CERTENROLLLib (т. е. CERTEnroll.dll из Windows SDK).
Базовый сертификат можно успешно создать с помощью этого метода. >
В качестве новой функции этот сертификат должен содержать расширение идентификатора ключа авторизации. Это добавляется в запрос рабочего сертификата:

Код: Выделить всё

var certificateRequest = new CX509CertificateRequestCertificate();

CX509ExtensionAuthorityKeyIdentifier aki = new CX509ExtensionAuthorityKeyIdentifierClass();
aki.InitializeEncode(EncodingType.XCN_CRYPT_STRING_HEX, CreateAuthorityKeyIdentifier(dn.Name, serialNumberBytes));
certificateRequest.X509Extensions.Add((CX509Extension)aki);
Метод CreateAuthorityKeyIdentifier использует AsnWriter(AsnEncodingRules.DER) для создания строки, которая преобразуется в шестнадцатеричную строку с обратным порядком байтов.

Код: Выделить всё

private static string CreateAuthorityKeyIdentifier(string issuer, byte[] serialNumber)
{
var keyId = "2.5.29.35";

var writer = new AsnWriter(AsnEncodingRules.DER);
writer.PushSequence();

var keyIdTag = new Asn1Tag(TagClass.ContextSpecific, 0);
writer.WriteOctetString(Encoding.ASCII.GetBytes(keyId), keyIdTag);

var issuerNameTag = new Asn1Tag(TagClass.ContextSpecific, 1);
writer.PushSequence(issuerNameTag);
var directoryNameTag = new Asn1Tag(TagClass.ContextSpecific, 4, true);
writer.PushSetOf(directoryNameTag);
writer.WriteEncodedValue((new X500DistinguishedName(issuer)).RawData);
writer.PopSetOf(directoryNameTag);
writer.PopSequence(issuerNameTag);

var issuerSerialTag = new Asn1Tag(TagClass.ContextSpecific, 2);
var issuerSerial = new BigInteger(serialNumber);
writer.WriteInteger(issuerSerial, issuerSerialTag);

writer.PopSequence();

return GetHexString(writer.Encode());
}
После создания регистрации и вызова CX509Enrollment.CreatePFX выдается исключение с кодом ошибки CertEnroll::CX509Enrollment::CreatePFX: Invalid Signature. 0x80090006 (-2146893818 NTE_BAD_SIGNATURE).
CX509Enrollment.InstallResponse вызывается раньше и не генерирует исключение.
Я не могу определить причину исключения.< /p>
Сертификат правильно создан с другими расширениями.
К сожалению, идентификатор ключа авторизации необходим используемая библиотека для принятия этого сертификата.

Подробнее здесь: https://stackoverflow.com/questions/792 ... c-sharp-us
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Импорт ошибок SSL -сертификат: не сертификат X.509
    Anonymous » » в форуме JAVA
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Сервер приложений Websphere проверяет, установлен ли сертификат сервера X.509.
    Anonymous » » в форуме Linux
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous
  • Ошибка импорта сертификата SSL: это не сертификат X.509.
    Anonymous » » в форуме JAVA
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Azure Hosted Service Bus: «Сертификат X.509 CN = ServiceBus.windows.net не в магазине Trusted People».
    Anonymous » » в форуме C#
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Файл index.php не перезагружается в реальном времени с расширением Live Server VS Code, веб-расширением Live Server и ра
    Anonymous » » в форуме Php
    0 Ответы
    152 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»