Базовый сертификат можно успешно создать с помощью этого метода. >
В качестве новой функции этот сертификат должен содержать расширение идентификатора ключа авторизации. Это добавляется в запрос рабочего сертификата:
Код: Выделить всё
var certificateRequest = new CX509CertificateRequestCertificate();
CX509ExtensionAuthorityKeyIdentifier aki = new CX509ExtensionAuthorityKeyIdentifierClass();
aki.InitializeEncode(EncodingType.XCN_CRYPT_STRING_HEX, CreateAuthorityKeyIdentifier(dn.Name, serialNumberBytes));
certificateRequest.X509Extensions.Add((CX509Extension)aki);
Код: Выделить всё
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.InstallResponse вызывается раньше и не генерирует исключение.
Я не могу определить причину исключения.< /p>
Сертификат правильно создан с другими расширениями.
К сожалению, идентификатор ключа авторизации необходим используемая библиотека для принятия этого сертификата.
Подробнее здесь: https://stackoverflow.com/questions/792 ... c-sharp-us