Проверка сертификата с использованием Интернета для проверки без необходимости? - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть приложение, которое получает элементы с высокоскоростного сканера. Когда элементы получены, они записываются на диск с помощью SQL Compact. Используются следующие DLL-библиотеки Microsoft с цифровой подписью:

    sqlceca40.dll
    sqlcecompact40.dll
    sqlceer40EN.dll
    sqlceme40.dll
    sqlceoledb40.dll
    sqlceqp40.dll
    sqlcese40.dll

Я получил жалобу на производительность от клиента и отследил проблему с использованием Microsoft Procmon до сбоя TCP Reconnect при попытке связаться с сайтом для проверки сертификата, когда мы выполняем вызовы методов в этих библиотеках. Сначала я не мог воссоздать проблему локально. Поговорив с их людьми и разработчиками инфраструктуры, я узнал, что они должны использовать прокси для подключения к Интернету. У некоторых пользователей заказчика (в тестовой среде) были допустимые настройки прокси, и они получили хорошую производительность от нашего приложения. Естественно, когда они отключили свои настройки прокси-сервера, проверка не могла быть выполнена, и возникла проблема с производительностью.

Я попытался воссоздать проблему, настроив нашу машину с ложными настройками прокси на несуществующей машине. С моей первой попытки я все еще получил хорошую производительность от нашего приложения, и не было предпринято никакой попытки связаться с Интернетом для проверки сертификата. Посмотрев цепочку проверки сертификата, я заметил, что она получена из сертификата «Microsoft Root Certificate Authority». Затем я экспортировал и удалил этот сертификат и смог воспроизвести проблему, что было определено сравнением журналов.

Я сделал следующие тесты:

    Test 1:
    1. Opened the proxy settings, and enabled them pointing to a non-existent address.
    2. Ran a test.   
    Results: No performance issue.

    Test 2:
    1. Exported the “Microsoft Root Certificate Authority” cert and moved it to the untrusted folder.
    2. Ran a test.  
    Results: The performance issue occurred.

    Test 3:
    1. Deleted the “Microsoft Root Certificate Authority” cert.
    2. Started a test.  
    Results: The performance issue began occuring.
    3. While the test was in progress and device was hesitating I removed the false proxy settings.  
    Results: The performance issue disappeared and the application recovered.

    Tentative Conclusions:
    1. That I can simulate the no internet access condition by providing false proxy settings.
    2. If the “Microsoft Root Certificate Authority” cert is installed properly, the .Net infrastructure does not need to access the network to verify the necessary cert.
    3. If not, it will attempt to validate via the internet connection.

Тем не менее, когда клиент проверил сертификаты в папке «Сертификаты доверенных корней» на локальном компьютере mmc-> сертификаты. Там есть сертификат «Root Certificate Authority», и он, похоже, идентичен моему. Тем не менее, по какой-то причине использование dll вызывает проверку сертификата для попытки доступа в Интернет, что приводит к проблемам с производительностью.

В ситуации с клиентом, в конечном итоге, устройства будут использоваться на производстве без доступа к Интернету.

У меня вопрос: есть ли параметр (реестр или объект групповой политики), который может привести к тому, что проверка сертификата всегда будет пытаться использовать Интернет, независимо от того, установлен ли корневой сертификат цепочки проверки на локальном компьютере?

Можно ли включить параметр, который приводит к проверке сертификата для доступа в Интернет, чтобы проверить, например, был ли отозван корневой сертификат?

Пожалуйста, не стесняйтесь задавать вопросы, если вам нужна дополнительная информация.

1 Ответ

0 голосов
/ 10 сентября 2018

По-видимому, это происходит для SQL Server Compact 4.0 в любой системе с недопустимой конфигурацией прокси-сервера, поскольку проверка списка отзыва сертификатов выполняется каждый раз при загрузке модуля (что происходит при первом вызове .Open ()).

Решение. Чтобы избежать этой задержки, которая, вероятно, влияет на любое подписанное приложение в рассматриваемой системе, необходимо исправить конфигурацию или отключить проверку.Проверка может быть отключена через пользовательский интерфейс или через настройки реестра, как описано здесь: http://digital.ni.com/public.nsf/allkb/18E25101F0839C6286256F960061B282

Дополнительные проблемы см. В моем блоге здесь: http://erikej.blogspot.com/2013/08/faq-why-is-opening-my-sql-server.html

...