Visual Studio Nuget.org SSL/TLS error
Некоторое время Visual Studio стояла у меня без дела, но когда она мне понадобилась, выяснилось, что доступ к репозиторию пакетов недоступен с ошибкой SSL/TLS error приблизительно следующего содержания:
Unable to load the service index for source https://api.nuget.org/v3/index.json.An error occurred while sending the request.The request was aborted: Could not create SSL/TLS secure channel.
Доступ к указанному URL в Firefox работает.
Эта проблема возникла не в 2020 году: об этом написано в developercommunity.visualstudio.com, на SO и на GitHub. Как это часто бывает, всё обсуждавшееся тогда не имеет отношения к сегодняшней проблеме.
Основное решение:
New-Item 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Server' -Force | Out-Null New-ItemProperty -path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Server' -name 'Enabled' -value 0 -PropertyType 'DWord' -Force | Out-Null New-ItemProperty -path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Server' -name 'DisabledByDefault' -value 1 -PropertyType 'DWord' -Force | Out-Null New-Item 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Client' -Force | Out-Null New-ItemProperty -path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Client' -name 'Enabled' -value 0 -PropertyType 'DWord' -Force | Out-Null New-ItemProperty -path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Client' -name 'DisabledByDefault' -value 1 -PropertyType 'DWord' -Force | Out-Null Write-Host 'TLS 1.3 has been disabled.' New-Item 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server' -Force | Out-Null New-ItemProperty -path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server' -name 'Enabled' -value 1 -PropertyType 'DWord' -Force | Out-Null New-ItemProperty -path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server' -name 'DisabledByDefault' -value 0 -PropertyType 'DWord' -Force | Out-Null New-Item 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client' -Force | Out-Null New-ItemProperty -path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client' -name 'Enabled' -value 1 -PropertyType 'DWord' -Force | Out-Null New-ItemProperty -path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client' -name 'DisabledByDefault' -value 0 -PropertyType 'DWord' -Force | Out-Null Write-Host 'TLS 1.2 has been enabled.'
Это тоже не помогло.
После того как я исполнил все ритуальные пляски (прописав в реестре отключение TLS 1.3 и включение 1.2, отключив TLS 1.1 в настройках IE) и оставшись на том же месте, я начал искать другое. Проверка (переход по ссылке https://www.ssllabs.com/ssltest/viewMyClient.html во внутреннем браузере VS) показала, что TLS 1.2 работает, а всё ненужное — не работает, так что проблема не в этом.
Проблема — в сертификате nuget.org. Поводом к такой мысли стала статья, где сообщалось об издыхании сертификата Microsoft и обещалось вскоре сообщить о новом сертификате для сайта nuget.org. На сайте nuget.org я такого сообщения не нашёл, но всё равно заподозрил, что сертификат более невалидный. Значит, необходимо просто взять актуальный, и загрузить его в системный реестр сертификатов.
В FF это просто: переходим на сайт, открываем свойства, выгружаем сертификат, загружаем его в реестр. В картинках это выглядит так:

Нажать кнопку >.

Нажать кнопку Подробнее. Откроется окно Информация о странице.

Нажать на кнопку Просмотреть сертификат. В FF откроется окно просмотра сертификата.

Прокрутить окно вниз до раздела Разное.

Нажать на ссылку PEM (сертификат) и сохранить его.

Открыть консоль сертификатов, и импортировать сохраненный сертификат в Сертификаты (локальный компьютер) > Доверенные лица > Реестр > Сертификаты.
Одно не ясно мне — почему новая установка Visual Studio в виртуальной машине не имела таких проблем и работала нормально?