我们的客户在通过客户端证书身份验证进行身份验证时遇到了失败。
use IISCrypto完成了他们的The 1.2配置。SSL协议和TLS1.1被标记为禁用。
他们使用IISCrypto完成了他们的密码套件配置。
我检查了密码套件\ .net框架版本\操作系统版本\重新协商TLS\服务器证书设置\.net网关设置\ Windows服务。但是我得不到任何结果。
然后,我尝试编写一些故障排除程序来测试通信和握手序列。我一无所获。
使用客户端证书发送消息时,Curl.exe
和openssl s_client
都可以,但在C#中总是失败,我的代码如下:
X509Certificate2 cert = new X509Certificate2(@"C:\Communicate.pfx", "xxxxx");
HttpClient client = null;
System.Net.Http.WebRequestHandler _internalHandler = new System.Net.Http.WebRequestHandler();
_internalHandler.UseProxy = false;
_internalHandler.ClientCertificates.Add(cert);
_internalHandler.ServerCertificateValidationCallback = ((obj, x509, chain, policyError) =>
{
return true;
});
client = new HttpClient(_internalHandler);
client.BaseAddress = new Uri(string.Format("https://{0}:{1}/", args[0], int.Parse(args[1])));
TCP我试图写一个================================Update======================请求器来测试。它成功了。在HttpClient\WebRequest
和SslStream
之间,客户端证书选择处理程序似乎是不同的。
X509Certificate2 cert = new X509Certificate2(@"C:\Communicate.pfx", "xxxxxxxx");
X509Certificate2Collection col = new X509Certificate2Collection();
col.Add(cert);
TcpClient client = new TcpClient(args[0], int.Parse(args[1]));
Stream stream = client.GetStream();
SslStream ssl = new SslStream(stream, false, new RemoteCertificateValidationCallback((a, b, c, d) =>
{
return true;
}),
new LocalCertificateSelectionCallback((sender, targetHost, localCertificates, remoteCertificate, acceptableIssuers)=>
{
return cert;
}));
ssl.AuthenticateAsClient("1.1.1.1", col, System.Security.Authentication.SslProtocols.Tls12, false);
string x = "GET /api/TimebasedProxy/ HTTP/1.1\r\n";
x += "Host:1.1.1.1\r\n";
x += "Content-Type: application/json\r\n";
x += "Connection: Close\r\n\r\n";
byte[] xs = Encoding.UTF8.GetBytes(x);
ssl.Write(xs, 0, xs.Length);
================Update=============
我得到的原因是:服务器端的HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\SendTrustedIssuerList
设置为1。(https://docs.microsoft.com/en-us/windows-server/security/tls/tls-registry-settings#sendtrustedissuerlist)
但是客户在Windows Server2012R2下运行他们的服务器,谁将SendTrustedIssuerList
设置为1?==========================Update============= IISCrypto做到了。无论您对IISCrypto做了什么,IISCrypto总是将SendTrustedIssuerList
设置为1。这是一个错误。
发布于 2020-11-09 16:14:17
我得到的原因是:服务器端的HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\SendTrustedIssuerList
设置为1。(https://docs.microsoft.com/en-us/windows-server/security/tls/tls-registry-settings#sendtrustedissuerlist)
但是客户在Windows server 2012R2下运行其服务器,谁将SendTrustedIssuerList
设置为1?
IISCrypto做到了。无论您对IISCrypto做了什么,IISCrypto总是将SendTrustedIssuerList
设置为1。这是一个错误。
https://stackoverflow.com/questions/64747910
复制相似问题