Я создаю службу для получения смарт-карт пользователей только в домене SmartCard
(поэтому я не могу пройти аутентификацию пользователя, поскольку он не зарегистрирован на смарт-карте, поэтому я использую другие методы аутентификации для аутентификации пользователя), а затем пользователь отправляет мне свой CSR, но когда я пытаюсь создать сертификат от имени пользователя, я получаю следующую ошибку:
"CertEnroll :: CX509Enrollment :: Enroll: Этот тип сертификата может быть
выдан только пользователю. Указанная роль не была настроена для
приложение 0x8004e00c (-2147164148 CONTEXT_E_ROLENOTFOUND) "
Я создал учетную запись службы, которая имеет доступ к Enrollment Agent Certificate
, и создал сертификат для этой учетной записи. Я также создал шаблон смарт-карты, который требует подписи сертификата агента регистрации для запроса сертификата от имени пользователей, и дал этой учетной записи службы полный доступ к этому шаблону.
Приложение запускается в пуле приложений IIS, который использует эту учетную запись службы в качестве удостоверения, и я запрашиваю сертификат, используя этот код (он использует CERTENROLLLib
):
_cSignerCertificateWrapper.Initialize(true, X509PrivateKeyVerify.VerifyNone, EncodingType.XCN_CRYPT_STRING_BASE64, Convert.ToBase64String(_x509Certificate2Wrapper.RawData));
var innerRequest = new CX509CertificateRequestPkcs10Class();
innerRequest.InitializeDecode("ContextMachine", EncodingType.XCN_CRYPT_STRING_BINARY);
innerRequest.InitializeDecode(request);
_cx509CertificateRequestCmcWrapper.InitializeFromInnerRequestTemplateName(innerRequest, templateName);
_cx509CertificateRequestCmcWrapper.RequesterName = requesterName;
_cx509CertificateRequestCmcWrapper.SignerCertificate = _cSignerCertificateWrapper.WrappedObject;
_cx509CertificateRequestCmcWrapper.Encode();
_cx509EnrollmentWrapper.InitializeFromRequest(_cx509CertificateRequestCmcWrapper.WrappedObject);
try
{
_cx509EnrollmentWrapper.Enroll();
}
Я также переключил учетную запись IIS для запуска под моим пользователем, и я все еще получаю сообщение об ошибке. мне нужно каким-то образом проходить аутентификацию в CA или он использует мою идентификационную информацию IIS для запроса (я проверил, что он работает в контексте, проверив выходные данные этого System.Security.Principal.WindowsIdentity.GetCurrent().Name
)?