Опишу возможные варианты поиска и решения проблем возникновения ошибок
System.Net.Http.HttpRequestException: The SSL connection could not be established
The underlying connection was closed: An unexpected error occurred on a send.
Проявляться может при вызове Invoke-WebRequest с операционной системы Windows:
+ Invoke-WebRequest -URI https://nodejs.org/dist/v16.14.2/node-v16.14.2 ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebExc
eption
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
В Event viewer при этом могут возникать ошибки вида:
EventID 36871
A fatal error occurred while creating an SSL client credential. The internal error state is 10013.
Schannel
EventID 36874
An SSL 2.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 SSL connection request has failed.
1. Просмотр какие протоколы используются на целевой странице
Через браузер (не системный) или другую систему смотрим в инструментах разработчика что используется, например:
Protocol
TLS 1.3
Key exchange group
X25519
Cipher
AES_128_GCM
2. Настройки SSL и TLS
Согласно документации Microsoft настраиваем параметры TLS в реестре.
Пример включения TLS 1.2. Client
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp\
DefaultSecureProtocols = (DWORD): 0xAA0
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp\
DefaultSecureProtocols = (DWORD): 0xAA0
настройки производить в параметрах реестра:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client]
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client]
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client]
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Client]
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Client]
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server]
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server]
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server]
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server]
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Server]
Включить базово использование протоколов можно через системное окно настроек обозревателя, например для SSL 3.0
Internet Options > Advanced > Settings > Security > Use SSL 3.0.
Дополнительно можем задать подключение после активаци в реестре из коммандной строки и попробовать
[Net.ServicePointManager]::SecurityProtocol = "tls13, tls12, tls11, tls,SSL3"
3. Настройки алгоритмов шифрования
В реестре в ветке
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL
проверяем не выключены ли протоколы шифрования
4. Обновляем .netFramework до версии поддерживающей протоколы
В частности TLS 1.3 используется в .netFramework 4.8. В ОС до windows server 2016 может отсутствовать поддержка (зависит от обновлений) - в этом случае используем ОС с поддержкой требуемых протоколов.
TLS 1.
Посмотреть какие .NetFramework используются в системе можно из PowerShell
Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP' -Recurse | Get-ItemProperty -Name version -EA 0 | Where { $_.PSChildName -Match '^(?!S)\p{L}'} | Select PSChildName, version