c# - 请求被中止:无法从 HttpWebRequest 创建 SSL/TLS 安全通道
问题描述
我正在尝试在 c# 中使用 HTTP Web 请求进行 Web 服务调用,我的 curl 调用成功,如下所示:
curl --cert cert.der --cert-type der --key keystore.pem --pass password https://xxx.xx.xx.xx:443/abcd/power/api --header "Authorization:Basic vsXNlckE6MTExMTEx" -H "Content-Type:application/json" -d partner.json -o output.dat -v -k
当我调用它时,我得到了预期的输出。
下面是我的 C# 代码,它不起作用并给我一个错误。
//import file and create byte array
FileStream fs = File.OpenRead(folder + "cert.der");
byte[] buf = new byte[1024];
int c;
while ((c = fs.Read(buf, 0, buf.Length)) > 0)
{
Console.WriteLine(Encoding.UTF8.GetString(buf, 0, c));
}
ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback((sender, certificate, chain, policyErrors) => { return true; });
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
// create X509Certificate
X509Certificate2 x509 = new X509Certificate2();
X509KeyStorageFlags x509KeyStorageFlags = new X509KeyStorageFlags();
x509.Import(buf, getSecureString(), x509KeyStorageFlags);
// create http web request and make a call
var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
httpWebRequest.ContentType = "application/json";
httpWebRequest.Method = "POST";
httpWebRequest.Headers["Authorization"] = "Basic " +
Convert.ToBase64String(Encoding.Default.GetBytes("abcd:123456"));
httpWebRequest.KeepAlive = true;
httpWebRequest.ProtocolVersion = HttpVersion.Version10;
httpWebRequest.ClientCertificates.Add(x509);
httpWebRequest.PreAuthenticate = true;
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
streamWriter.Write(json);
}
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var result = streamReader.ReadToEnd();
Console.WriteLine(result);
}
解决方案
推荐阅读
- c# - Dot Net Core 未在 Ubuntu 中打开私钥
- python - 将两列长度相等的列合并为一列
- regex - 不遵循 Scrapy CrawlSpider 规则?
- flutter - 使用 MaterialPageRoute 刷新背面
- php - 多对多关系 - 将数据从多个表移动到单个表
- android - Button.setOnClickListener() 在我的代码中不起作用
- cmake - 错误的 CMake 安装目录
- javascript - ajax 错误返回中的特定 SQLState 处理
- mysql - 如何:按值及其在表中的新位置对用户进行排序
- c# - 在 vue.js 中渲染一个剃刀视图循环