Необработанное чтение исключений из X509CertificateStore - PullRequest
0 голосов
/ 04 марта 2020

Я работаю с очень старым проектом и перевожу его с локальной на azure ВМ, работающую на windows сервере 2016, и после перемещения мы заметили, что конечная точка API возвращает Bad Gateway (502). Я пересоздал запрос с помощью почтальона и заметил, что я даже не получил ответ. После добавления нескольких журналов я сузил их до метода, описанного ниже, где предполагается считывать маркер безопасности из сертификата. Кажется, что необработанное исключение возникает непосредственно перед кодом, который повторяет каждый сертификат, но я не могу поймать исключение, используя UnhandledExceptionEventHandler. Насколько я вижу, все необходимые сертификаты на месте. Тот, который использовался здесь, я даже дал группе пользователей «Все» полный доступ только для того, чтобы просто исключить это как возможную причину ошибки. В действительности этот метод полон регистрации для каждой строки кода, но я удалил его для удобства чтения.

        private static X509SecurityToken GetSecurityTokenBySimpleDisplayName(string simpleDisplayName)
        {
            if (string.IsNullOrEmpty(simpleDisplayName))
                throw new ArgumentNullException("simpleDisplayName");
            try
            {
                AppDomain currentDomain = AppDomain.CurrentDomain;
                currentDomain.UnhandledException += new UnhandledExceptionEventHandler(MyHandler);
                using (X509CertificateStore store = X509CertificateStore.LocalMachineStore(X509CertificateStore.MyStore))
                {
                    var isOpen = store.OpenRead();

                    int certIndex = -1;
                    /***** HERE IS WHERE IT CRASHES *****/
                    for (int i = 0; i < store.Certificates.Count; i++)
                    {
                        if (store.Certificates[i].SimpleDisplayName.ToLower().Equals(simpleDisplayName.ToLower()))
                            certIndex = i;
                    }

                    if (certIndex < 0)
                    {
                        throw new SecurityException("Certificate " + simpleDisplayName + " not found");
                    }

                    var token = new X509SecurityToken(store.Certificates[certIndex]);
                    return token;
                }
            }
            catch(Exception ex)
            {
                // Logging exception
                return null;
            }
        }

        public static void MyHandler(object sender, UnhandledExceptionEventArgs args)
        {
            Exception e = (Exception)args.ExceptionObject;
            // Logging exception

        }

Журнал событий приложения выдает эту ошибку:

  • Неправильное имя приложения: w3wp.exe, версия: 10.0.14393.0, отметка времени: 0x57899b8a
  • Неисправное имя модуля: KERNELBASE.dll, версия: 10.0.14393.3383, отметка времени: 0x5ddcba29
  • Код исключения: 0xe0434352
  • Смещение ошибки: 0x0000000000034c48
  • Идентификатор ошибочного процесса: 0x3528
  • Время запуска ошибочного приложения: 0x01d5f20898415d08
  • Путь неверного приложения: c: \ windows \ system32 \ inetsrv \ w3wp.exe
  • Путь неверного модуля: C: \ windows \ System32 \ KERNELBASE.dll
  • Идентификатор отчета: 64f16b87-a524-4e0e-9ab9-d8295ce7b29b
  • Полное имя ошибочного пакета:
  • Идентификатор ошибочного пакета относительно приложения:

Как я могу получить лучшее представление о том, что не так?

1 Ответ

0 голосов
/ 05 марта 2020

Нашел ответ. Пул приложений нужно было установить на «Включить 32-битное приложение», после того как он снова заработал, он снова начал работать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...