De client en server kunnen niet communiceren, omdat ze geen gemeenschappelijk algoritme hebben – ASP.NET C# IIS TLS 1.0 / 1.1 / 1.2 – Win32Exception

Ik heb een probleem met een C# PayTrace Gateway. De onderstaande code werkte prima tot gisteren, toen ik geloof dat ze SSL3 hadden uitgeschakeld vanwege de Poedel-exploit. Bij het uitvoeren van de onderstaande code kregen we het volgende bericht. De externe server heeft de verbinding geforceerd verbroken. Na wat onderzoek naar het probleem te hebben gedaan, hebben we vastgesteld dat omdat onze IIS Server 7.5 was geconfigureerd om nog steeds SSL3 te gebruiken, C# standaard SSL3 was, waardoor PayTrace de verbinding met geweld zou sluiten. We hebben toen SSL3 van de server verwijderd. Wat vervolgens tot de volgende fout leidde:

De client en server kunnen niet communiceren, omdat ze geen gemeenschappelijk algoritme hebben.

Mijn gok is dat er een extra SSL-algoritme is dat we op de server moeten installeren nu SSL 3 is verwijderd. Onze IT-medewerkers beweren dat TLS 1.1 en TLS 1.2 werken en dat ASP.NET daar nu standaard op zou moeten draaien. Maar ik heb het gevoel dat er nog iets anders moet zijn dat we op de server moeten installeren, ik heb geen kennis van SSL-algoritmen, dus ik heb geen idee waar ik moet beginnen.

var postUrl = new StringBuilder();
//Initialize url with configuration and parameter values...
postUrl.AppendFormat("UN~{0}|", this.MerchantLoginID);
postUrl.AppendFormat("PSWD~{0}|", this.MerchantTransactionKey);
postUrl.Append("TERMS~Y|METHOD~ProcessTranx|TRANXTYPE~Sale|"); 
postUrl.AppendFormat("CC~{0}|", cardNumber);
postUrl.AppendFormat("EXPMNTH~{0}|", expirationMonth.PadLeft(2, '0'));
postUrl.AppendFormat("EXPYR~{0}|", expirationYear);
postUrl.AppendFormat("AMOUNT~{0}|", transactionAmount);
postUrl.AppendFormat("BADDRESS~{0}|", this.AddressLine1);
postUrl.AppendFormat("BADDRESS2~{0}|", this.AddressLine2);
postUrl.AppendFormat("BCITY~{0}|", this.City);
postUrl.AppendFormat("BSTATE~{0}|", this.State);
postUrl.AppendFormat("BZIP~{0}|", this.Zip);
postUrl.AppendFormat("SADDRESS~{0}|", this.AddressLine1);
postUrl.AppendFormat("SADDRESS2~{0}|", this.AddressLine2);
postUrl.AppendFormat("SCITY~{0}|", this.City);
postUrl.AppendFormat("SSTATE~{0}|", this.State);
postUrl.AppendFormat("SZIP~{0}|", this.Zip);
if (!String.IsNullOrEmpty(this.Country))
{
    postUrl.AppendFormat("BCOUNTRY~{0}|", this.Country);
}
if (!String.IsNullOrEmpty(this.Description))
{
    postUrl.AppendFormat("DESCRIPTION~{0}|", this.Description);
}
if (!String.IsNullOrEmpty(this.InvoiceNumber))
{
    postUrl.AppendFormat("INVOICE~{0}|", this.InvoiceNumber);
}
if (this.IsTestMode)
{
    postUrl.AppendFormat("TEST~Y|");
}
//postUrl.Append();
WebClient wClient = new WebClient();
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
String sRequest = "PARMLIST=" + Url.Encode(postUrl.ToString());
wClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
string sResponse = "";
sResponse = wClient.UploadString(PayTraceUrl, sRequest);

Ook, alleen een FYI, gebeurt dit probleem ook wanneer we verbinding maken met de eerste data E4-gateway, dus het is niet alleen een PayTrace-ding. Mijn gok is dat als meer gateways toegang tot SSL3 uitschakelen, we zullen doorgaan met problemen met andere gateways totdat dit op de server kan worden opgelost. Ook vond ik een paar suggesties online, sommigen suggereerden het plaatsen van de volgende code vlak voordat het uitgaande verzoek is:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;

Helaas werkte dat ook niet, zelfde fout. Daarom denk ik dat er iets extra’s op de IIS7.5-server moet worden geïnstalleerd. Ik weet alleen niet zeker wat.


Antwoord 1, autoriteit 100%

Er zijn nu verschillende andere berichten hierover en ze wijzen allemaal op het inschakelen van TLS 1.2. Alles minder is onveilig.

Je kunt dit doen in .NET 3.5 met een patch.
U kunt dit doen in .NET 4.0 en 4.5 met een enkele regel code

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; // .NET 4.5
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072; // .NET 4.0

In .NET 4.6 gebruikt het automatisch TLS 1.2.

Zie hier voor meer details:
.NET-ondersteuning voor TLS


Antwoord 2, autoriteit 19%

In mijn geval kreeg ik, hoewel het doelframework van project 4.7.1 was, nog steeds dezelfde fout. Oplossing was om httpRuntime in web.config onder system.web te wijzigen in 4.7.1!


Antwoord 3, autoriteit 14%

In een eerder antwoord werd voorgesteld om deze regel code te gebruiken voor .Net 4.5:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; // .NET 4.5

Ik zou je willen aanmoedigen om die waarde OR te geven aan wat de bestaande waarden ook zijn:

ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12; // .NET 4.5

Als je naar de lijst met waarden kijkt, zie je dat ze een macht van twee zijn. Zo werkt je code ook in de toekomst als het naar bijvoorbeeld TLS 2.0 verschuift.


Antwoord 4, autoriteit 7%

Dit is opgelost. Het blijkt dat onze IT-medewerkers correct was. Beide TLS 1.1 en TLS 1.2 zijn op de server geïnstalleerd. Het probleem was echter dat onze sites als ASP.NET 4.0 draaien en u moet ASP.NET 4.5 hebben om TLS 1.1 of TLS 1,2 te draaien. Dus, om het probleem op te lossen, moest onze IT-medewerkers TLS 1.0 opnieuw inschakelen om een ​​verbinding met PayTrace toe te staan.

Zo kort, het foutbericht, “de client en de server kunnen niet communiceren, omdat ze geen gemeenschappelijk algoritme hebben”, werd veroorzaakt omdat er geen SSL-protocol beschikbaar was op de server om te communiceren met de servers van PayTrace.

Update:
Schakel TLS 1.0 niet in op uw servers, dit was een tijdelijke oplossing en is niet langer van toepassing omdat er nu betere werkzaamheden zijn die zorgen voor sterke beveiligingspraktijken. Zie Geaccepteerd antwoord voor een oplossing. FYI, ik ga dit antwoord op de site bewaren, omdat het informatie geeft over wat het probleem was, alsjeblieft niet down-stemming.


Antwoord 5, Autoriteit 6%

Het inschakelen van TLS 1.0 heeft onze problemen ook opgelost (na het uitschakelen van SSL V3). (Server 2012 R2 met ASP.NET 4.0 Website-verwerking tegen PPI Pay Services). Dit is het Regedit-script dat ik vroeger alles instelde zoals ik wilde. We hebben SSL V3 alleen uitgeschakeld voor de klant en niet de server als het doen van andere dingen die we nog niet klaar waren om mee om te gaan. Nadat we de site naar .NET 4.5.2 upgraden, zullen we TLS 1.0 opnieuw uitschakelen.

Dit script maakt alle protocollen, server en client mogelijk, behalve SSL V3 voor de klant.

Zorg ervoor dat u een back-up van uw register maakt!

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Client]
"Enabled"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Server]
"Enabled"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client]
"Enabled"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client]
"DisabledByDefault"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server]
"Enabled"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server]
"DisabledByDefault"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client]
"Enabled"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client]
"DisabledByDefault"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server]
"Enabled"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server]
"DisabledByDefault"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client]
"Enabled"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client]
"DisabledByDefault"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server]
"Enabled"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server]
"DisabledByDefault"=dword:00000000

Antwoord 6, autoriteit 5%

Mijn app wordt uitgevoerd in .NET 4.7.2. Eenvoudigste oplossing was om dit toe te voegen aan de configuratie:

 <system.web>
    <httpRuntime targetFramework="4.7.2"/>
  </system.web>

Antwoord 7, Autoriteit 5%

Er zijn twee mogelijke scenario, in mijn geval heb ik 2e punt gebruikt.

  1. Als u geconfronteerd wordt met dit probleem in de productieomgeving en kunt u eenvoudig nieuwe code insluiten op de productie, dan kunt u onderstaande oplossing gebruiken.

    U kunt onderstaande regel code toevoegen voordat u API-oproep maakt,

    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; // .NET 4.5

  2. Als u geen nieuwe code kunt inzetten en u wilt oplossen met dezelfde code die aanwezig is in de productie, kan dit probleem worden gedaan door een configuratie-instellingsbestand te wijzigen.
    U kunt een van één toevoegen in uw configuratie-bestand.

<runtime>
    <AppContextSwitchOverrides value="Switch.System.Net.DontEnableSchUseStrongCrypto=false"/>
  </runtime>

of

<runtime>
  <AppContextSwitchOverrides value="Switch.System.Net.DontEnableSystemDefaultTlsVersions=false"
</runtime>

Antwoord 8, Autoriteit 2%

Nadat u deze dagen na rommelig bent, heeft mijn laatste oplossing voor onze problemen twee dingen nodig;

1) We hebben deze regel code toegevoegd aan al onze .NET-bibliotheken die Bound API oproepen tot andere leveranciers die ook hun SSL V3 hadden uitgeschakeld.

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls; // (.Net 4 and below)

2) Dit zijn de laatste en VOLLEDIGE registerwijzigingen die u nodig hebt als u ASP.Net 4.0-sites gebruikt en die lichtjes moeten worden gewijzigd nadat u een upgrade naar ASP.Net 4.5 heeft uitgevoerd.

Nadat we de servers opnieuw hadden opgestart, waren alle problemen hierna verdwenen.

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Client]
"DisabledByDefault"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Client]
"Enabled"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server]
"DisabledByDefault"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server]
"Enabled"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Client]
"DisabledByDefault"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Client]
"Enabled"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Server]
"DisabledByDefault"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Server]
"Enabled"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client]
"Enabled"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client]
"DisabledByDefault"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server]
"Enabled"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server]
"DisabledByDefault"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client]
"Enabled"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client]
"DisabledByDefault"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server]
"Enabled"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server]
"DisabledByDefault"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client]
"Enabled"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client]
"DisabledByDefault"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server]
"Enabled"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server]
"DisabledByDefault"=dword:00000000

Antwoord 9, Autoriteit 2%

Ik heb deze fout opgelost door de app van .NET Framework 4.5 tot 4.6.2 te upgraden.

TLS-1.2 is correct geïnstalleerd op de server en oudere versies zoals TLS-1.1 waren uitgeschakeld. Echter ,.net 4. ondersteunt geen ondersteuning voor TLS-1.2.


Antwoord 10

In eerdere antwoorden worden een paar registersleutels die mogelijk niet zijn gemist.
Ze zijn SchusestrongCrypto die moeten bestaan ​​om toe te staan ​​aan TLS-protocollen die goed werken.

Nadat de registersleutels zijn geïmporteerd, moet het niet verplicht zijn om wijzigingen in code als

aan te brengen

ServicePointManager.SecurityProtoCol = SecurityProtoColtype.tls;

Hieronder staan ​​alle registersleutels en waarden die nodig zijn voor X64 Windows OS.
Als u 32 bits OS (x86) hebt, verwijdert u gewoon de laatste 2 regels.
TLS 1.0 wordt uitgeschakeld door het register-script.
Het opnieuw opstarten van OS is vereist.

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Client]
"DisabledByDefault"=dword:00000001
"enabled"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\server]
"disabledbydefault"=dword:00000001
"enabled"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\ssl 3.0]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\ssl 3.0\client]
"disabledbydefault"=dword:00000001
"enabled"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\ssl 3.0\server]
"disabledbydefault"=dword:00000001
"enabled"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\tls 1.0]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\tls 1.0\client]
"disabledbydefault"=dword:00000001
"enabled"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\tls 1.0\server]
"disabledbydefault"=dword:00000001
"enabled"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\tls 1.1]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\tls 1.1\client]
"disabledbydefault"=dword:00000000
"enabled"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\tls 1.1\server]
"disabledbydefault"=dword:00000000
"enabled"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\tls 1.2]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\tls 1.2\client]
"disabledbydefault"=dword:00000000
"enabled"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\tls 1.2\server]
"disabledbydefault"=dword:00000000
"enabled"=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001

Antwoord 11

Er zijn een aantal dingen die u hieraan moet controleren.

Als er een dergelijke fout optreedt met betrekking tot het maken van een beveiligde verbinding, probeer dan een script zoals hieronder in Powershell uit te voeren met de naam van de machine of de uri (zoals “www.google.com”) om resultaten te krijgen terug voor elk van de verschillende protocoltypes:

function Test-SocketSslProtocols {
    [CmdletBinding()] 
    param(
        [Parameter(Mandatory=$true)][string]$ComputerName,
        [int]$Port = 443,
        [string[]]$ProtocolNames = $null
        )
    #set results list    
    $ProtocolStatusObjArr = [System.Collections.ArrayList]@()
    if($ProtocolNames -eq $null){
        #if parameter $ProtocolNames empty get system list
        $ProtocolNames = [System.Security.Authentication.SslProtocols] | Get-Member -Static -MemberType Property | Where-Object { $_.Name -notin @("Default", "None") } | ForEach-Object { $_.Name }
    }
    foreach($ProtocolName in $ProtocolNames){
        #create and connect socket
        #use default port 443 unless defined otherwise
        #if the port specified is not listening it will throw in error
        #ensure listening port is a tls exposed port
        $Socket = New-Object System.Net.Sockets.Socket([System.Net.Sockets.SocketType]::Stream, [System.Net.Sockets.ProtocolType]::Tcp)
        $Socket.Connect($ComputerName, $Port)
        #initialize default obj
        $ProtocolStatusObj = [PSCustomObject]@{
            Computer = $ComputerName
            Port = $Port 
            ProtocolName = $ProtocolName
            IsActive = $false
            KeySize = $null
            SignatureAlgorithm = $null
            Certificate = $null
        }
        try {
            #create netstream
            $NetStream = New-Object System.Net.Sockets.NetworkStream($Socket, $true)
            #wrap stream in security sslstream
            $SslStream = New-Object System.Net.Security.SslStream($NetStream, $true)
            $SslStream.AuthenticateAsClient($ComputerName, $null, $ProtocolName, $false)
            $RemoteCertificate = [System.Security.Cryptography.X509Certificates.X509Certificate2]$SslStream.RemoteCertificate
            $ProtocolStatusObj.IsActive = $true
            $ProtocolStatusObj.KeySize = $RemoteCertificate.PublicKey.Key.KeySize
            $ProtocolStatusObj.SignatureAlgorithm = $RemoteCertificate.SignatureAlgorithm.FriendlyName
            $ProtocolStatusObj.Certificate = $RemoteCertificate
        } 
        catch  {
            $ProtocolStatusObj.IsActive = $false
            Write-Error "Failure to connect to machine $ComputerName using protocol: $ProtocolName."
            Write-Error $_
        }   
        finally {
            $SslStream.Close()
        }
        [void]$ProtocolStatusObjArr.Add($ProtocolStatusObj)
    }
    Write-Output $ProtocolStatusObjArr
}
Test-SocketSslProtocols -ComputerName "www.google.com"

Het zal proberen socketverbindingen tot stand te brengen en volledige objecten te retourneren voor elke poging en succesvolle verbinding.

Controleer, nadat je hebt gezien wat er terugkomt, je computerregister via regedit (zet “regedit” in run of zoek “Registry Editor”), plaats

Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL

in het bestandspad en zorg ervoor dat u het juiste TLS-protocol hebt ingeschakeld voor de server waarmee u verbinding probeert te maken (van de resultaten die u van de scripts hebt gekregen). Pas indien nodig aan en reset vervolgens uw computer (dit is vereist). Probeer opnieuw verbinding te maken met het powershell-script en kijk welke resultaten u terugkrijgt. Als het nog steeds niet lukt, zorg er dan voor dat de algoritmen, hashes en versleutelingen die moeten worden ingeschakeld, beperken wat moet worden ingeschakeld (IISCrypto is hiervoor een goede toepassing en is gratis beschikbaar. Het geeft u een realtime beeld van wat is in- of uitgeschakeld in uw SChannel-register waar al deze dingen zich bevinden).

Houd ook rekening met de Windows-versie, DotNet-versie en updates die u momenteel hebt geïnstalleerd, want ondanks het feit dat veel TLS-opties standaard zijn ingeschakeld in Windows 10, hadden eerdere versies patches nodig om de optie in te schakelen.

Nog een laatste ding: TLS is een tweerichtingsstraat (houd dit in gedachten) met het idee dat de server die beschikbaar heeft, net zo belangrijk is als de klant. Als de server alleen aanbiedt om verbinding te maken via TLS 1.2 met behulp van bepaalde algoritmen, kan er geen client contact maken met iets anders. Als de client ook geen verbinding zal maken met iets anders anders dan een bepaald protocol of ciphersuite, werkt de verbinding niet. Browsers zijn ook iets waarmee rekening moet worden gehouden met dit vanwege hun dwingende fouten op HTTP2 voor alles wat betreft met minder dan TLS 1.2, ondanks dat er geen foutmelding is (ze gooien het om te proberen te upgraden, maar de register-instellingen Bestaan om dit gedrag te wijzigen).

Other episodes