Certenroll на Azure - Создание самозаверяющих сертификатов - PullRequest
1 голос
/ 11 ноября 2019

Я создал сертификаты самозаверяющего создания, используя Certenroll ( CERTENROLLLib ). Все работает локально, но как только я развернул в Azure , я получаю либо:

Ошибка API сервера: Сообщение: CertEnroll :: CX509Enrollment :: _ CreateRequest: В доступе отказано. 0x80070005 (WIN32: 5. Core.Services.CertificateService.d__4.MoveNext () --- Конец трассировки стека от предыдущего местоположения, где было сгенерировано исключение --- в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (Задача) в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Задача задачи) в Foo.ServerApi.Services.DocumentSigningService.d__7.MoveNext () --- Конец трассировки стека из предыдущего местоположения, где было сгенерировано исключение --- в System.Runtime.CompilerServices.TccesskAwaiter.ThrowForNuS) в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Задача) в Foo.ServerApi.Services.DocumentSigningService.d__5.MoveNext () --- Конец трассировки стека от пред. Это место, где было сгенерировано исключение --- в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (задача-задача) в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (задача-задача) в System.Runtime.CasidAateair)
в Foo.ServerApi.Controllers.DocumentController. <> C__DisplayClass10_1. d.MoveNext ()

при использовании:

var cert = new CX509CertificateRequestCertificate();
            cert.InitializeFromPrivateKey(X509CertificateEnrollmentContext.ContextMachine, privateKey, "");

или

Ошибка API сервера: Сообщение: CertEnroll :: CX509CertificateRequestCertificate :: InitializeFromPrivateKey:Неверный параметр. 0x80070057 (WIN32: 87 ERROR_INVALID_PARAMETER), StackTrace: в CERTENROLLLib.IX509CertificateRequestCertificate2.InitializeFromPrivateKey (X509CertificateEnrollmentContext контексте, IX509PrivateKey pPrivateKey, строка strTemplateName) в Foo.Api.Core.Providers.CertificateProvider.GenerateBase64EncodedPfx (String Subjectname, Int32 certificateValidityInYears, строка пароля) на Foo.Api.Core.Services.CertificateService.d__4.MoveNext () --- Конец трассировки стека из предыдущего расположения, в котором было сгенерировано исключение --- в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (Task task) в System.Runtime. CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Задача задачи) в Foo.ServerApi.Services.DocumentSigningService.d__7.MoveNext () --- Конец трассировки стека из предыдущего местоположения, в котором было сгенерировано исключение --- в System.Runtime.CompilerSerwaSser Services. (Задача) в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Задача таsk) в Foo.ServerApi.Services.DocumentSigningService.d__5.MoveNext () --- Конец трассировки стека из предыдущего расположения, в котором было сгенерировано исключение --- в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (задача-задача) в системе. Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Задача) в System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (Задача)
в Foo.ServerApi.Controllers.DocumentControlisplay>. d.MoveNext ()

при использовании:

var cert = new CX509CertificateRequestCertificate();
            cert.InitializeFromPrivateKey(X509CertificateEnrollmentContext.ContextUser, privateKey, "");

Есть ли способ решить эту проблему с помощью Certenroll в Azure?

Редактировать: последняя ошибка, которая привела меня к правильному пути.

Ошибка API сервера: Сообщение: CertEnroll :: CX509PrivateKey :: Create: Системе не удается найти указанный файл. 0x80070002 (WIN32: 2 ERROR_FILE_NOT_FOUND), StackTrace: вCERTENROLLLib.IX509PrivateKey2.Create () в Foo.Api.Core.Providers.CertificateProvider.GenerateBase64EncodedPfx (String subjectName, Int32 CertificateValidityInYears, Строковый пароль) в Foo.Api.Core.Ser4.Service.Ner__Service.Certifyтрассировка стека от предыдущего местоположения, где было сгенерировано исключение --- в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (задача-задача) в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (задача-задача) в Foo.SeringSocument.vice.Sec. .MoveNext () --- Конец трассировки стека из предыдущего расположения, в котором было сгенерировано исключение --- в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (Задача) в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (задача задачи)Foo.ServerApi.Services.DocumentSigningService.d__5.MoveNext () --- Конец трассировки стека от предыдущего местоположения, где было сгенерировано исключение --- в System.Runtime.CompilerServices.TaskAwaiter. ThrowForNonSuccess (задача-задача) в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (задача-задача) в System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (задача-задача)
класса_оклапаd.MoveNext ()

1 Ответ

1 голос
/ 11 ноября 2019
  1. использовать X509CertificateEnrollmentContext.ContextUser в InitializeFromPrivateKey
  2. при создании параметра личного ключа privateKey.MachineContext = false;
  3. в Azure добавить новый параметр приложения

WEBSITE_LOAD_USER_PROFILE = 1

, который заставил меня работать

...