.NetCore项目使用Https证书

.NetCore项目使用Https证书

1.Https证书

举例介绍SSL证书,属Https证书。SSL证书是数字证书的一种,类似于驾驶证、护照和营业执照的电子副本,因为配置在服务器上,也称为SSL服务器证书。SSL证书就是遵守SSL协议,由受信任的数字证书颁发机构CA,在验证服务器身份后颁发, 具有服务器身份验证和传输加密功能。

2.为什么部署Https证书

1、服务器部署了SSL证书后可以确保用户到服务器之间的数据以https高强度加密传输,可防止数据在传输过程中被第三方监听、截取和篡改,保护通信的安全性及数据完整性。

2、部署SSL证书能消除浏览器地址栏发出的“不安全”的警告,谷歌等浏览器对未部署SSL证书以http明文传输的网站会发出“不安全”的警告,这会极大的引起用户对网站安全性的怀疑。

3、能向用户证明网站的真实身份,其身份是通过第三方权威机构验证的,尤其是EVSSL证书,能在地址栏直接显示单位名称,更能确保网站的安全性,树立网站形象,不给欺诈钓鱼网站可乘之机。

4、有助于提升网站的SEO搜索引擎排名,近年来谷歌等浏览器都在大力支持部署了SSL证书的HTTPS网站,并给予它们更好的搜索引擎排名。

3.项目怎么引入Https

3.1 配置处理

在appsettings.json中加入下面的配置,方便部署

  "IsHttps": false,
  "CertName": "server.pfx",
  "CertPwd": "A9qxcg34",
  "ServerIP": "www.xxx.top",
  "ServerPort": 8877,
  "AllowedHosts": "*"
3.2 程序处理

在Program.cs中的CreateHostBuilder函数的ConfigureWebHostDefaults中加入下列代码:

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .UseServiceProviderFactory(new AutofacServiceProviderFactory())
                .UseNLog()
                .ConfigureWebHostDefaults(webBuilder =>
                {
                       var builder = new ConfigurationBuilder().SetBasePath(Environment.CurrentDirectory).AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
                       var config = builder.Build();
                       string serverIP = config.GetSection("ServerIP").Get<string>();
                       int serverPort = config.GetSection("ServerPort").Get<int>();

                       bool isHttps = config.GetSection("IsHttps").Get<bool>();
                       string certName = config.GetSection("CertName").Get<string>();
                       string certPwd = config.GetSection("CertPwd").Get<string>();

                       if (isHttps)
                       {
                           webBuilder.UseKestrel(option =>
                           {
                               option.Listen(System.Net.IPAddress.Any, serverPort, (lop) =>
                               {
                                   lop.UseHttps(certName, certPwd);
                                   //参数为证书文件名称,证书密码
                               });
                           });
                       }
                       else
                       {
                           webBuilder.UseUrls($"http://{serverIP}:{serverPort}");
                       }
                       webBuilder.UseStartup<Startup>();
                 });

4.效果

发布项目,部署在服务器后,效果如下所示:
在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
使用 .NET Core Socket 进行 SSL/TLS 通信时,可以使用 X509Certificate2 类来验证证书。具体步骤如下: 1. 实例化 X509Certificate2 对象,将证书加载进来。 ```csharp var cert = new X509Certificate2("path/to/certificate.pfx", "password"); ``` 2. 创建 SslStream 对象,并在构造函数中指定套接字和是否进行身份验证。 ```csharp var sslStream = new SslStream(socket, false, ValidateCertificate); ``` 第二个参数指定是否在 SSL/TLS 握手期间进行身份验证。如果指定为 true,则会在握手期间验证服务器证书和客户端证书(如果有)的有效性。如果指定为 false,则可以在握手之后显式地调用 ValidateCertificate 方法来验证证书。 3. 在 ValidateCertificate 方法中,可以使用 X509Chain 类来验证证书链的有效性。 ```csharp private bool ValidateCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { if (sslPolicyErrors == SslPolicyErrors.None) { // 证书链有效 return true; } // 验证证书链的有效性 var chainPolicy = new X509ChainPolicy(); chainPolicy.RevocationMode = X509RevocationMode.NoCheck; chainPolicy.VerificationFlags = X509VerificationFlags.IgnoreUnknownAuthority | X509VerificationFlags.IgnoreEndRevocationUnknown; if (!chain.Build(new X509Certificate2(certificate))) { // 证书链无效 return false; } // 验证证书链中的每个证书是否被信任 foreach (var chainElement in chain.ChainElements) { if (!chainElement.Certificate.Verify()) { // 证书无效 return false; } } // 证书链有效 return true; } ``` 在上面的代码中,我们首先检查 sslPolicyErrors 参数,如果为 SslPolicyErrors.None,则表示证书链是有效的,可以直接返回 true。 如果 sslPolicyErrors 不为 SslPolicyErrors.None,则需要使用 X509Chain 类来验证证书链的有效性。我们创建了一个 X509ChainPolicy 对象,并指定了 RevocationMode 和 VerificationFlags 属性。然后,我们调用 chain.Build 方法来构建证书链,并检查结果是否为 true。如果结果为 false,则证书链是无效的,返回 false。 如果证书链是有效的,则需要验证证书链中的每个证书是否被信任。我们使用 foreach 循环遍历证书链中的每个证书,并调用 Verify 方法来验证证书是否被信任。如果有任何一个证书无效,则返回 false。如果所有证书都被信任,则返回 true,表示证书链是有效的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

laiger90

众筹一元加个菜~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值