클라이언트와 서버에 공통 알고리즘(ASP.NET C# VB Visual Basic IIS TLS 1.0 / 1.1 / 1.2)이 없기 때문에 통신할 수 없습니다.
C# PayTrace 게이트웨이에 문제가 있습니다.아래 코드는 어제까지 정상적으로 작동하다가 푸들 익스플로잇으로 SSL3를 끈 것 같습니다.아래 코드를 실행할 때 우리는 다음과 같은 메시지를 받았습니다.원격 서버가 연결을 강제로 닫았습니다.문제에 대해 조사한 결과, IIS 서버 7.5가 SSL3을 계속 사용하도록 구성되어 있기 때문에 C#이 SSL3로 기본 설정되어 PayTrace에서 강제로 연결을 종료하는 것으로 확인되었습니다.그런 다음 서버에서 SSL3를 제거했습니다.그러면 다음 오류가 발생합니다.
클라이언트와 서버가 공통 알고리즘을 가지고 있지 않기 때문에 통신할 수 없습니다.
SSL 3이 제거되었으므로 서버에 추가 SSL 알고리즘을 설치해야 할 것 같습니다.IT 담당자는 TLS 1.1 및 TLS 1.2가 작동하고 있으며 ASP.NET이 이를 기본값으로 설정해야 한다고 주장합니다.하지만 아직 서버에 설치해야 할 다른 것이 있을 것 같습니다. SSL 알고리즘에 대한 지식이 없어서 어디서부터 시작해야 할지 모르겠습니다.
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);
또한 FYI, 이 문제는 First Data E4 게이트웨이에 연결할 때도 발생하므로 단순한 PayTrace 문제가 아닙니다.더 많은 게이트웨이가 SSL3에 대한 액세스를 해제함에 따라 서버에서 이 문제가 해결될 때까지 다른 게이트웨이와 관련된 문제가 계속 발생할 것으로 예상됩니다.또한 온라인에서 몇 가지 제안을 찾았는데, 일부는 아웃바운드 요청을 하기 직전에 다음 코드를 배치할 것을 제안했습니다.
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
불행하게도 그것도 작동하지 않았습니다, 같은 오류입니다.그래서 IIS 7.5 서버에 추가 설치가 필요하다고 생각합니다.뭐가 뭔지 잘 모르겠어요.
현재 이에 대한 다른 게시물이 몇 개 있으며 모두 TLS 1.2 사용을 가리키고 있습니다.그 이하의 것은 안전하지 않습니다.
3하여 이 을 수행할 수 .NET 3.5에서는 패치를 사용하여 이 작업을 수행할 수 있습니다.
. 4및 4 한 로 이 을 수행할 수 .NET 4.0 및 4.5에서 한 줄의 코드로 이 작업을 수행할 수 있습니다.
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; // .NET 4.5
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072; // .NET 4.0
.NET 4.6에서는 자동으로 TLS 1.2를 사용합니다.
자세한 내용은 TLS에 대한 .NET 지원을 참조하십시오.
저의 경우, Target Framework of Project가 4.7.1임에도 불구하고 여전히 동일한 오류가 발생했습니다. 해결책은 시스템에서 web.config의 httpRuntime을 변경하는 것이었습니다.4.7.1에 웹!
이전 답변에서 에 대해 이 코드 라인을 사용할 것을 제안했습니다.넷 4.5:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; // .NET 4.5
저는 당신이 그 값을 다음과 같은 기존 값으로 OR할 것을 권장합니다.
ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12; // .NET 4.5
값 리스트를 보면 값이 2의 거듭제곱이라는 것을 알 수 있습니다.이러한 방식으로, 예를 들어 TLS 2.0으로 전환하는 경우에도 코드는 계속 작동합니다.
내 앱은 .net 4.7.2에서 실행되고 있습니다.가장 간단한 해결책은 구성에 다음을 추가하는 것이었습니다.
<system.web>
<httpRuntime targetFramework="4.7.2"/>
</system.web>
두 가지 가능한 시나리오가 있는데, 저의 경우 두 번째 포인트를 사용했습니다.
프로덕션 환경에서 이 문제에 직면하여 프로덕션에 새 코드를 쉽게 배포할 수 있는 경우 아래 솔루션을 사용할 수 있습니다.
api 호출을 하기 전에 아래 줄의 코드를 추가할 수 있습니다.
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; // .NET 4.5
새 코드를 배포할 수 없고 프로덕션에 있는 동일한 코드로 해결하려면 일부 구성 설정 파일을 변경하여 이 문제를 해결할 수 있습니다.구성 파일에 둘 중 하나를 추가할 수 있습니다.
<runtime>
<AppContextSwitchOverrides value="Switch.System.Net.DontEnableSchUseStrongCrypto=false"/>
</runtime>
또는
<runtime>
<AppContextSwitchOverrides value="Switch.System.Net.DontEnableSystemDefaultTlsVersions=false"/>
</runtime>
이것은 해결되었습니다.우리의 IT 직원이 옳았다는 것이 밝혀졌습니다.서버에 TLS 1.1과 TLS 1.2가 모두 설치되었습니다.그러나 문제는 당사의 사이트가 ASP.NET 4.0으로 실행되고 있으며 TLS 1.1 또는 TLS 1.2를 실행하려면 ASP.NET 4.5가 있어야 한다는 것이었습니다.따라서 이 문제를 해결하기 위해 IT 직원은 TLS 1.0을 다시 활성화하여 PayTrace와의 연결을 허용해야 했습니다.
간단히 말해서, "클라이언트와 서버는 공통 알고리즘을 가지고 있지 않기 때문에 통신할 수 없습니다."라는 오류 메시지가 서버에 PayTrace의 서버와 통신하는 데 사용할 수 있는 SSL 프로토콜이 없었기 때문에 발생했습니다.
업데이트: 서버에서 TLS 1.0을 활성화하지 마십시오. 이는 임시 수정 사항이며 강력한 보안 관행을 보장하는 더 나은 해결 방법이 있으므로 더 이상 적용할 수 없습니다.해결 방법은 승인된 답변을 참조하십시오.
TLS 1.0을 사용하도록 설정하면 SSL v3를 사용하지 않도록 설정한 후에도 문제가 해결되었습니다.(ASP.net 이 설치된 Server 2012 R2 4.0 웹 사이트에서 PPI 유료 서비스에 대해 처리).이것은 제가 원하는 대로 모든 것을 설정하기 위해 사용했던 RegEdit 스크립트입니다.아직 처리할 준비가 되지 않은 다른 문제를 해결하기 위해 서버가 아니라 클라이언트용 SSL v3만 사용하지 않도록 설정했습니다.사이트를 로 업그레이드한 후.Net 4.5.2 그러면 TLS 1.0을 다시 비활성화합니다.
이 스크립트는 클라이언트용 SSL v3를 제외한 모든 프로토콜, 서버 및 클라이언트를 활성화합니다.
레지스트리를 백업해야 합니다!
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
제 경우에는 에서 마지막 TLS 버전을 활성화하여 문제를 해결했습니다.이 기사에서 설명하는 Net Framework:
https://learn.microsoft.com/dotnet/framework/network-programming/tls
다음 레지스트리 키 설정:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319] "SystemDefaultTlsVersions"=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319] "SystemDefaultTlsVersions"=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
이와 관련하여 확인해야 할 사항이 몇 가지 있습니다.
보안 연결과 관련하여 이와 같은 오류가 발생할 때마다 Powershell의 아래와 같은 스크립트를 시스템 이름과 함께 실행하거나 uri(예: "www.google.com ")를 실행하여 각 프로토콜 유형에 대한 결과를 반환합니다.
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"
소켓 연결을 설정하고 각 시도 및 성공적인 연결에 대해 완전한 개체를 반환합니다.
무엇이 반환되는지 확인한 후 regedit을 통해 컴퓨터 레지스트리를 확인합니다("regedit"을 실행에 넣거나 "registry Editor"를 검색).
Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL
파일 경로에서 연결하려는 서버에 대해 적절한 TLS 프로토콜이 활성화되어 있는지 확인합니다(스크립트에서 반환한 결과에서).필요에 따라 조정한 다음 컴퓨터를 재설정합니다(필수).powershell 스크립트와 다시 연결하여 어떤 결과를 얻을 수 있는지 확인합니다.그래도 여전히 실패할 경우, 사용하도록 설정해야 하는 알고리즘, 해시 및 암호가 사용해야 하는 범위를 좁히고 있는지 확인합니다(IISCrypto는 이에 적합한 응용 프로그램이며 무료로 사용할 수 있습니다).이 모든 것이 위치한 SC채널 레지스트리에서 활성화 또는 비활성화된 항목을 실시간으로 볼 수 있습니다.
Windows 10에서 기본적으로 사용하도록 설정된 많은 TLS 옵션에도 불구하고 이전 버전에서는 옵션을 사용하려면 패치가 필요했기 때문에 현재 설치한 Windows 버전, DotNet 버전 및 업데이트도 고려해야 합니다.
마지막으로, TLS는 양방향 거리입니다(이 점을 명심하십시오). 서버가 사용 가능한 것을 제공하는 것이 클라이언트만큼 중요합니다.서버가 특정 알고리즘을 사용하여 TLS 1.2를 통해서만 연결을 제공하는 경우, 어떤 클라이언트도 다른 클라이언트와 연결할 수 없습니다.또한 클라이언트가 특정 프로토콜 또는 암호 이외의 다른 프로토콜과 연결하지 않으면 연결이 작동하지 않습니다.브라우저는 실제로 오류가 없음에도 불구하고 TLS 1.2 미만으로 수행된 모든 작업에 대해 HTTP2에서 강제 오류가 발생하기 때문에 이 점을 고려해야 합니다(그들은 오류가 발생하지 않고 사람들이 업그레이드하도록 시도하지만 이 동작을 수정하기 위해 레지스트리 설정이 존재합니다).
며칠 동안 이 문제를 해결한 후, 우리의 문제에 대한 최종 해결책은 두 가지가 필요했습니다.
우리는 이 코드 라인을 우리의 모든 것에 추가했습니다.SSL v3를 사용하지 않도록 설정한 다른 공급업체에 아웃바운드 API 호출을 수행하는 Net 라이브러리.
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls; // (.Net 4 and below)
이것은 ASP.Net 4.0 사이트를 실행할 때 필요한 최종 및 전체 레지스트리 변경이며 ASP.Net 4.5로 업그레이드한 후 약간 변경해야 합니다.
서버를 재부팅한 후 모든 문제가 해결되었습니다.
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
에서 앱을 업그레이드하여 이 오류를 수정했습니다.Net Framework 4.5 - 4.6.2.
TLS-1.2가 서버에 올바르게 설치되었으며 TLS-1.1과 같은 이전 버전은 비활성화되었습니다.하지만.Net 4.5는 TLS-1.2를 지원하지 않습니다.
이전 답변에서는 존재하지 않을 수 있는 몇 가지 레지스트리 키가 누락되었습니다.TLS 프로토콜이 제대로 작동하려면 SchUseStrongCrypto가 있어야 합니다.
레지스트리 키를 레지스트리로 가져온 후에는 다음과 같은 코드를 변경할 필요가 없습니다.
ServicePoint Manager.보안 프로토콜 = 보안 프로토콜 유형.Tls;
아래에는 x64 윈도우즈 OS에 필요한 모든 레지스트리 키 및 값이 나와 있습니다.32비트 OS(x86)를 사용하는 경우 마지막 두 줄만 제거하면 됩니다.TLS 1.0은 레지스트리 스크립트에 의해 비활성화됩니다.OS를 다시 시작해야 합니다.
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
Windows Server 2012에서 연결할 때 동일한 오류가 발생했습니다.IIS Crypto 실행 파일을 사용하여 TLS 및 SSL 설정을 변경하여 해결했습니다.특히 서버 프로토콜 SSL 3.0 및 TLS 1.0을 사용하지 않도록 설정했습니다.또한 클라이언트 프로토콜 SSL 3.0을 사용하지 않도록 설정했습니다(이것이 속임수였다고 생각합니다).이상적인 설정을 결정하는 기준으로 올바르게 작동하는 서버를 사용했습니다.스크린샷 - IIS 암호화 설정
Microsoft의 Powershell 스크립트를 통해 이 문제를 해결할 수 있습니다(제게는 효과가 있었습니다).
If (-Not (Test-Path 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v4.0.30319'))
{
New-Item 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v4.0.30319' -Force | Out-Null
}
New-ItemProperty -Path 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v4.0.30319' -Name 'SystemDefaultTlsVersions' -Value '1' -PropertyType 'DWord' -Force | Out-Null
New-ItemProperty -Path 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -PropertyType 'DWord' -Force | Out-Null
If (-Not (Test-Path 'HKLM:\SOFTWARE\Microsoft\.NETFramework\v4.0.30319'))
{
New-Item 'HKLM:\SOFTWARE\Microsoft\.NETFramework\v4.0.30319' -Force | Out-Null
}
New-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\.NETFramework\v4.0.30319' -Name 'SystemDefaultTlsVersions' -Value '1' -PropertyType 'DWord' -Force | Out-Null
New-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\.NETFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -PropertyType 'DWord' -Force | Out-Null
If (-Not (Test-Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server'))
{
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
If (-Not (Test-Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client'))
{
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. You must restart the Windows Server for the changes to take affect.' -ForegroundColor Cyan
나의 경우, 명령:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
오류를 반환합니다.
'ServicePoint Manager'라는 용어입니다.'보안 프로토콜'이 cmdlet, 함수, 스크립트 파일 또는 작동 가능한 프로그램의 이름으로 인식되지 않습니다.
이 명령은 효과가 있었습니다.
[Net.ServicePointManager]::SecurityProtocol = 'tls12'
언급URL : https://stackoverflow.com/questions/26742054/the-client-and-server-cannot-communicate-because-they-do-not-possess-a-common-a
'programing' 카테고리의 다른 글
지난 n일 이내에 모든 문서 찾기 (0) | 2023.07.01 |
---|---|
t-sql에서 'execute'를 사용하여 변수로 값을 설정하는 방법은 무엇입니까? (0) | 2023.07.01 |
불안정한 연결에서 대규모 프로젝트에 대한 깃 클론을 완료하는 방법은 무엇입니까? (0) | 2023.07.01 |
장고: 왜 일부 모델 필드는 서로 충돌합니까? (0) | 2023.06.26 |
스프링 부트 사용 중 스프링 배치 범위 문제 (0) | 2023.06.26 |