首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用WebRequest访问使用HTTPS的SSL加密站点?

如何使用WebRequest访问使用HTTPS的SSL加密站点?
EN

Stack Overflow用户
提问于 2009-02-18 20:11:49
回答 3查看 190.9K关注 0票数 122

我正在编写一个程序,从用户提供的URL读取内容。我的问题出在下面这样的代码中:

代码语言:javascript
复制
Uri uri = new Uri(url);
WebRequest webRequest = WebRequest.Create(uri);
WebResponse webResponse = webRequest.GetResponse();
ReadFrom(webResponse.GetResponseStream());

如果提供的URL是一个https:// url,这就会中断。谁能帮助我改变这段代码,使它将与SSL加密的内容。谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-02-18 14:24:33

您这样做是正确的,但是用户可能提供了指向安装了无效SSL证书的站点的urls。如果您在发出实际的web请求之前输入以下代码行,则可以忽略这些cert问题:

代码语言:javascript
复制
ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(AcceptAllCertifications);

其中AcceptAllCertifications定义为

代码语言:javascript
复制
public bool AcceptAllCertifications(object sender, System.Security.Cryptography.X509Certificates.X509Certificate certification, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors)
{
    return true;
}
票数 182
EN

Stack Overflow用户

发布于 2017-01-05 20:01:24

这个方法对我很有效:

代码语言:javascript
复制
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
票数 20
EN

Stack Overflow用户

发布于 2021-03-31 14:03:53

正如@LukeDuff投票最多的答案所说的那样,可能是服务器使用了无效的或不可信的(或自签名的,从技术上讲也是不可信的)证书。但是答案盲目地接受任何证书。更糟糕的是,任何网站的任何证书,甚至是你希望获得可信和有效证书的网站也是如此。这是一个安全漏洞。

在实现ServicePointManager.ServerCertificateValidation callback时,应该验证证书。例如通过对照已知值检查证书的散列:

代码语言:javascript
复制
using System.Net;
using System.Net.Security;
using System.Security.Cryptography;
代码语言:javascript
复制
ServicePointManager.ServerCertificateValidationCallback +=
    (sender, certificate, chain, errors) =>
    {
        return
            (errors == SslPolicyErrors.None) ||
            certificate.GetCertHashString(HashAlgorithmName.SHA256).Equals(
                "EB8E0B28AE064ED58CBED9DAEB46CFEB3BD7ECA67737179E3C85BC3CD09D4EEC");
    };

对于X509Certificate.GetCertHashString overload that takes HashAlgorithmName.SHA256,您需要.NET 4.8。在较旧的版本中,使用返回SHA-1散列的the parameter-less overload

基于

有关代码的VB.NET版本,请参阅。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/560804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档