gpt4 book ai didi

C# 从 HTTPS URL 中获取服务器证书抛出 System.PlatformNotSupportedException 异常

转载 作者:太空宇宙 更新时间:2023-11-03 15:12:40 26 4
gpt4 key购买 nike

我使用以下代码片段从 C# 中的 HTTPS URL 网站获取(或获取)证书。

此处发布了类似的代码 -> Open Certificate Information from Web Browser ControlC# Download all https certificates from a website 但没有任何帮助,我在下面的行 #

中不断收到异常
           X509Certificate cert = request.ServicePoint.Certificate;

异常:

   System.PlatformNotSupportedException: 'Operation is not supported on this platform.'

代码:

 private static void Main(string[] args)
{
String sslServerHost = "https://docs.genesys.com/Documentation"
HttpWebRequest request = (HttpWebRequest) WebRequest.Create( sslServerHost);
request.AllowAutoRedirect = false;

HttpWebResponse response = (HttpWebResponse)request.GetResponse();
response.Close();


X509Certificate cert = request.ServicePoint.Certificate;

//convert the X509Certificate to an X509Certificate2 object by passing it into the constructor
X509Certificate2 cert2 = new X509Certificate2(cert);

X509Store userCaStore = new X509Store(storeName: StoreName.Root, storeLocation: StoreLocation.CurrentUser);
try
{
userCaStore.Open(OpenFlags.ReadOnly);
userCaStore.Add(cert2);

Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
Debug.WriteLine(responseFromServer);
Console.WriteLine(responseFromServer);

} catch (Exception e)
{
Console.WriteLine(e.Message);
}

}

更新

.NET Core 项目不支持 ServicePoint.Certificate,因此我尝试使用以下代码使用服务器证书验证回调:

request.ServerCertificateValidationCallback += (sender, validatedCert, chain, 
errors) => { X509Certificate cert = new X509Certificate2(validatedCert);
Console.WriteLine("Inside callback" + cert); return errors ==
System.Net.Security.SslPolicyErrors.None; }

上面的回调似乎没有被调用。你们中的任何人都可以告诉我们什么时候执行上述回调。

此外,在未将服务器证书添加到信任库的情况下尝试连接到 HTTPS URL 时,我没有遇到任何异常。谁能告诉我为什么在尝试访问 HTTPS URL 时我们没有收到任何异常(在 .NET 应用程序中),因为我没有忽略证书验证。

最佳答案

在 .Net 核心上使用遗留的 HttpWebRequest 是自找麻烦。您应该切换到 HttpClient 并设置 callback在 HttpClientHandler 实例上。

  var handler = new HttpClientHandler();
handler.ServerCertificateCustomValidationCallback = (request,cert,chain,error) => true;
var client = new HttpClient(handler);

关于C# 从 HTTPS URL 中获取服务器证书抛出 System.PlatformNotSupportedException 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50818331/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com