Вкратце: как настроить службу ASP.Net Core, которая:
- Установлен в Windows (7 и выше, хотя я разрабатываю/тестирую на Windows 10)
- Подает данные через HTTPS
- Использует самозаверяющий SSL-сертификат (клиенты будут находиться в той же локальной сети, что и служба, и будут доступны через локальное имя хоста, поэтому покупка сертификата нецелесообразна)
- Разрешает подключаться клиентам TLS1.0 (к сожалению, работает в Windows XP)
У меня нет проблем с первыми тремя вещами, у меня проблемы только с клиентами TLS 1.0.
Я не верю, что это проблема с моей службой, а скорее с ОС Windows и/или самозаверяющим сертификатом SSL.
Сертификат создается через оболочку библиотеки CERTENROLLLib. Я могу изменить способ его генерации (длину ключа, алгоритмы хеширования и т. д.), но это (очевидно) не моя область знаний....
Несколько клиентов на базе Windows 7 и более поздних версий работают нормально, при условии, что у них есть самозаверяющий сертификат, добавленный в качестве доверенного сертификата, и/или они просто написаны так, чтобы не отклонять этот сертификат...
Когда клиенты (ну, единственный клиент, который у меня есть для тестирования), поддерживающий только TLS 1.0, пытаются подключиться, они получают ошибки SSL, и я вижу в своих журналах системных событий Windows 10 следующее:
An TLS 1.0 connection request was received from a remote client application,
but none of the cipher suites supported by the client application are
supported by the server. The TLS connection request has failed.
Если я создам локальный клиент на своем компьютере и заставлю его использовать только TLS 1.0 через:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
Тогда мой локальный клиент работает нормально... но тогда это машина, на которой был сгенерирован сертификат, поэтому он будет иметь точно такой же список шифров и т. д., так что это не так уж и много. сюрприз..
Я следовал различным советам, найденным в Интернете, о том, чтобы моя установка Windows 10 принимала подключения TLS 1.0, и считаю, что она настроена для этого.
Поэтому я думаю, что проблема заключается в следующем:
- Моя машина с Windows будет принимать соединения TLS1.0, но не имеет какой-либо формы шифрования, которую запрашивает клиент Windows XP, поэтому они не могут договориться; или же
- Самозаверяющий сертификат использует алгоритм хеширования, который клиент Windows XP не понимает.
Есть ли у кого-нибудь идеи, какой из них может быть, или какие-либо предложения по поводу того, какие алгоритмы хеширования и т. Д. Я должен использовать в сертификате, если это последний? Или если я далеко и что-то еще не так....?
Спасибо.