blog.icewolf.ch

Let's talk about IT!
posts - 1799, comments - 295, trackbacks - 0

My Links

Archives

Post Categories

icewolf

Admins setzt endlich die TLS 1.2 Einträge für Dotnet/Powershell

Hallo zusammen,

Ich sehe in letzter Zeit öfters eine Fehlermeldung beim Installieren von einem Modul aus der PowerShell Gallery. Die Ursache ist, dass hier eine TLS 1.2 Verbindung verlangt wird, und Dotnet und PowerShell noch nicht entsprechend konfiguriert sind.

Find-Module MSOnline

WARNING: Unable to resolve package source 'https://www.powershellgallery.com/api/v2'.
PackageManagement\Find-Package : No match was found for the specified search criteria and module name 'MSOnline'. Try
Get-PSRepository to see all available registered module repositories.
At C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1:1360 char:3
+         PackageManagement\Find-Package @PSBoundParameters | Microsoft ...
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (Microsoft.Power...ets.FindPackage:FindPackage) [Find-Package], Exceptio
   n
    + FullyQualifiedErrorId : NoMatchFoundForCriteria,Microsoft.PowerShell.PackageManagement.Cmdlets.FindPackage

Eigentlich kann man das ganz einfach mit dem folgenden Befehl lösen. Damit wird

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

Die benötigten Registry Einträge sind hier dokumentiert: Transport Layer Security (TLS) best practices with the .NET Framework

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v2.0.50727]
"SystemDefaultTlsVersions"=dword:00000001
"SchUseStrongCrypto"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v4.0.30319]
"SystemDefaultTlsVersions"=dword:00000001
"SchUseStrongCrypto"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v2.0.50727]
"SystemDefaultTlsVersions"=dword:00000001
"SchUseStrongCrypto"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319]
"SystemDefaultTlsVersions"=dword:00000001
"SchUseStrongCrypto"=dword:00000001

Das ganze geht natürlich auch per PowerShell

$RegistryKey = "HKLM:\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v2.0.50727"
If(Test-Path $RegistryKey)
{
 $exists = Get-ItemProperty -Path $RegistryKey -Name "SystemDefaultTlsVersions" -ErrorAction SilentlyContinue
 If ($exists -eq $null)
 {
  #Add
  New-ItemProperty -Path $RegistryKey -Name "SystemDefaultTlsVersions" -Value "00000001" -PropertyType DWORD -Force | Out-Null
 }
 Get-ItemProperty -Path $RegistryKey -Name "SystemDefaultTlsVersions" | fl PSPath, SystemDefaultTLSVersions
 
 $exists = Get-ItemProperty -Path $RegistryKey -Name "SchUseStrongCrypto" -ErrorAction SilentlyContinue
 If ($exists -eq $null)
 {
  #Add
  New-ItemProperty -Path $RegistryKey -Name "SchUseStrongCrypto" -Value "00000001" -PropertyType DWORD -Force | Out-Null
 }
 Get-ItemProperty -Path $RegistryKey -Name "SchUseStrongCrypto" | fl PSPath, SystemDefaultTLSVersions
}


$RegistryKey = "HKLM:\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v4.0.30319"
If(Test-Path $RegistryKey)
{
 $exists = Get-ItemProperty -Path $RegistryKey -Name "SystemDefaultTlsVersions" -ErrorAction SilentlyContinue
 If ($exists -eq $null)
 {
  #Add
  New-ItemProperty -Path $RegistryKey -Name "SystemDefaultTlsVersions" -Value "00000001" -PropertyType DWORD -Force | Out-Null
 }
 Get-ItemProperty -Path $RegistryKey -Name "SystemDefaultTlsVersions" | fl PSPath, SystemDefaultTLSVersions
 
 $exists = Get-ItemProperty -Path $RegistryKey -Name "SchUseStrongCrypto" -ErrorAction SilentlyContinue
 If ($exists -eq $null)
 {
  #Add
  New-ItemProperty -Path $RegistryKey -Name "SchUseStrongCrypto" -Value "00000001" -PropertyType DWORD -Force | Out-Null
 }
 Get-ItemProperty -Path $RegistryKey -Name "SchUseStrongCrypto" | fl PSPath, SystemDefaultTLSVersions
}


$RegistryKey = "HKLM:\SOFTWARE\Microsoft\.NETFramework\v2.0.50727"
If(Test-Path $RegistryKey)
{
 $exists = Get-ItemProperty -Path $RegistryKey -Name "SystemDefaultTlsVersions" -ErrorAction SilentlyContinue
 If ($exists -eq $null)
 {
  #Add
  New-ItemProperty -Path $RegistryKey -Name "SystemDefaultTlsVersions" -Value "00000001" -PropertyType DWORD -Force | Out-Null
 }
 Get-ItemProperty -Path $RegistryKey -Name "SystemDefaultTlsVersions" | fl PSPath, SystemDefaultTLSVersions
 
 $exists = Get-ItemProperty -Path $RegistryKey -Name "SchUseStrongCrypto" -ErrorAction SilentlyContinue
 If ($exists -eq $null)
 {
  #Add
  New-ItemProperty -Path $RegistryKey -Name "SchUseStrongCrypto" -Value "00000001" -PropertyType DWORD -Force | Out-Null
 }
 Get-ItemProperty -Path $RegistryKey -Name "SchUseStrongCrypto" | fl PSPath, SystemDefaultTLSVersions
}


$RegistryKey = "HKLM:\SOFTWARE\Microsoft\.NETFramework\v4.0.30319"
If(Test-Path $RegistryKey)
{
 $exists = Get-ItemProperty -Path $RegistryKey -Name "SystemDefaultTlsVersions" -ErrorAction SilentlyContinue
 If ($exists -eq $null)
 {
  #Add
  New-ItemProperty -Path $RegistryKey -Name "SystemDefaultTlsVersions" -Value "00000001" -PropertyType DWORD -Force | Out-Null
 }
 Get-ItemProperty -Path $RegistryKey -Name "SystemDefaultTlsVersions" | fl PSPath, SystemDefaultTLSVersions
 
 $exists = Get-ItemProperty -Path $RegistryKey -Name "SchUseStrongCrypto" -ErrorAction SilentlyContinue
 If ($exists -eq $null)
 {
  #Add
  New-ItemProperty -Path $RegistryKey -Name "SchUseStrongCrypto" -Value "00000001" -PropertyType DWORD -Force | Out-Null
 }
 Get-ItemProperty -Path $RegistryKey -Name "SchUseStrongCrypto" | fl PSPath, SystemDefaultTLSVersions
}

Ich habe mir dafür eine GPO erstellt.

Die kann nun auf alle Clients und Server angewendet werden.

Nach einem Neustart geht das auch ohne [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

Grüsse
Andres Bohren

Print | posted on Thursday, December 3, 2020 11:57 PM | Filed Under [ Security Powershell ]

Powered by:
Powered By Subtext Powered By ASP.NET