代码之家  ›  专栏  ›  技术社区  ›  SebMa

使用powershell 2.0在windows 7上启用tls1.2

  •  0
  • SebMa  · 技术社区  · 4 年前

    无法在带有powershell 2.0的Windows 7SP1上启用TLS1.2:

    PS C:\Windows\system32> $PSVersionTable
    
    Name                           Value
    ----                           -----
    CLRVersion                     2.0.50727.8806
    BuildVersion                   6.1.7601.17514
    PSVersion                      2.0
    WSManStackVersion              2.0
    PSCompatibleVersions           {1.0, 2.0}
    SerializationVersion           1.1.0.1
    PSRemotingProtocolVersion      2.1
    

    我想P.Sv2.0正在使用。NET 2.0版:

    PS C:\Windows\system32> $PSVersionTable.CLRVersion
    
    Major  Minor  Build  Revision
    -----  -----  -----  --------
    2      0      50727  8806
    
    PS C:\Windows\system32> [System.Environment]::Version
    
    Major  Minor  Build  Revision
    -----  -----  -----  --------
    2      0      50727  8806
    

    此外,还有以下几点。NET版本已安装在此系统上:

    PS C:\Windows\system32> Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP' -Recurse | Get-ItemProperty -Name Version, Release -ErrorAction 0 | where { $_.PSChildName -match '^(?!S)\p{L}'} | select Version, Release, PSChildName
    
    Version                           Release                          PSChildName
    -------                           -------                          -----------
    2.0.50727.5420                                                     v2.0.50727
    3.0.30729.5420                                                     v3.0
    3.0.4506.5420                                                      Windows Communication Foundation
    3.0.6920.5011                                                      Windows Presentation Foundation
    3.5.30729.5420                                                     v3.5
    4.8.03761                         528049                           Client
    4.8.03761                         528049                           Full
    4.0.0.0                                                            Client
    

    但是,我无法使用该配置设置TLSv1.2:

    PS C:\Windows\system32> [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
    Exception lors de la définition de « SecurityProtocol » : « Impossible de convertir la valeur Null en type « System.Net.SecurityProtocolType » en raison de valeurs d'énumération non valides. Spécifiez l'une des valeurs d'énumération suivantes et réessayez. Les valeurs d'énumération possibles sont « Ssl3, Tls ». »
    Au niveau de ligne : 1 Caractère : 28
    + [Net.ServicePointManager]:: <<<< SecurityProtocol = [Net.SecurityProtocolType]::Tls12
        + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
        + FullyQualifiedErrorId : PropertyAssignmentException
    PS C:\Windows\system32> [enum]::GetNames([Net.SecurityProtocolType])
    Ssl3
    Tls
    PS C:\Windows\system32> 
    

    编辑0:@mclayton设置 [Net.ServicePointManager]::SecurityProtocol 为整数值 3072 也不起作用:

    PS C:\Windows\system32> [Net.ServicePointManager]::SecurityProtocol = 3072
    Exception lors de la définition de « SecurityProtocol » : « Impossible de convertir la valeur « 3072 » en type « System.Net.SecurityProtocolType » en raison de valeurs d'énumérati
    on non valides. Spécifiez l'une des valeurs d'énumération suivantes et réessayez. Les valeurs d'énumération possibles sont « Ssl3, Tls ». »
    Au niveau de ligne : 1 Caractère : 28
    + [Net.ServicePointManager]:: <<<< SecurityProtocol = 3072
        + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
        + FullyQualifiedErrorId : PropertyAssignmentException
    

    你能帮助我吗?

    0 回复  |  直到 4 年前
        1
  •  2
  •   mclayton    4 年前

    为了进一步阐述@Abraham Zinala的评论 Tls12 枚举值未添加到 System.Net.SecurityProtocolType 枚举,直到Dot Net Framework 4.5版本(参见 https://learn.microsoft.com/en-us/dotnet/api/system.net.securityprotocoltype?view=netframework-4.5 ).

    您的PowerShell 2.0安装使用的版本低于此版本,因此无法解析的值 [Net.SecurityProtocolType]::Tls12 .

    您可以改为使用枚举的整数值:

    # assign the magic number to a variable for clarity
    $tls12 = 3072;
    
    [Net.ServicePointManager]::SecurityProtocol = $tls12;
    
    推荐文章