zoukankan      html  css  js  c++  java
  • NET Core Kestrel部署HTTPS 一个服务器绑一个证书 一个服务器绑多个证书

     .net core 3.0 网站发布到centos后,绑定ssl证书,一个服务器绑一个证书,一个服务器绑多个证书

    开始之前:对于windows服务器不存在这个问题,在iis中绑定证书是非常简单的一件事,不是本篇博客讨论的范围,绑定多个证书一样

    3.0中指定url的方式可以通过在配置文件中加urls:"http://*:5000"这种方式来指定

    发布到centos的.net core网站我是用 Kestrel托管的。这里也只针对这一种情况进行描述

    1,在program.cs中CreateHostBuilder 替换成如下内容:

     public static IHostBuilder CreateHostBuilder(string[] args) =>
                Host.CreateDefaultBuilder(args)
                    .ConfigureWebHostDefaults(webBuilder =>
                    {
                        webBuilder.UseStartup<Startup>()
                        .UseKestrel((context, options) =>
                        {
                            options.Configure(context.Configuration.GetSection("Kestrel"));
                        });
                    });

    这段代码描述的是Kestrel服务的option从配置文件中读取 

    紧接着在startup中增加 app.UseHttpsRedirection(); app.UseHsts();//默认是开启的,如果是,就不用管它

    2,在配置文件appsettings.json中增加,这是单独的配置节点 ,其中path,是pfx文件的位置,password是证书的密码,在阿里云申请的证书,下载iis版的就有这两

      "Kestrel": {
        "Limits": {
          "MaxRequestBodySize": 9223372036854775807,
          "MaxRequestBufferSize": 9223372036854775807,
          "MaxRequestLineSize": 9223372036854775807
        },
        "Endpoints": {
          "Https": {
            "Url": "https://*:443",
            "Certificate": {
              "Path": "/home/cert/www.xxxx.pfx",
              "Password": "xxx"
            }
          }
        }
      }

    这里的配置项可以参考微软的文档,基本上大多数需要代码显式指定的配置在appsettings.json中都是可以直接配置的

    参考文档地址:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-3.1#endpoint-configuration

    如果一台服务器里边只有一个需要ssl证书的网站,那么到这里,问题就解决了。

    很不幸,我的目标是在一台服务器里边使用两个ssl证书,分别对两个网站做ssl传输加密,在查过微软的部分文档后,没有找到相关的解决方案,反而是找到了nginx。在linux用nginx可以解决一台服务器绑定两个ssl的问题

    首先是安装:yum install nginx,一路y,安装完毕后,nginx的主配置文件是   /etc/nginx/nginx.conf 直接修改这个文件,分别对N个需要ssl的站点进行配置,如下,监听端口都是443,区别是server_name ,根据需要配置的域名,分别写对应的server_name,

    加粗部分是需要特别关注的,pem,和key这两 如果是在阿里云申请的ssl,下载的时候选择 nginx版的,就包含下边需要的两文件,可以放到任意位置,这里填写的是这两文件的路径,location里边的内容是转发的本地端口对应的就是域名对应的子网站。子网站必须是发布了的,可访问的站点,另外需要特别注意一下子网站不需要任何证书,只需要可以访问即可

    server {
           listen 443;
           server_name serverName1.com;
           ssl on;
           root '/';
           ssl_certificate 'xxxx.pem';
           ssl_certificate_key 'xxxx.key';
           ssl_session_cache shared:SSL:1m;
           ssl_session_timeout  10m;
           ssl_ciphers PROFILE=SYSTEM;
           ssl_prefer_server_ciphers on;
           include /etc/nginx/default.d/*.conf;
           location / {
                proxy_pass http://127.0.0.1:5000;
           }
           error_page 404 /404.html;
               location = /40x.html {
           }
    
           error_page 500 502 503 504 /50x.html;
               location = /50x.html {
           }
       }
    server {
           listen 443;
           server_name serverName2.com;
           ssl on;
           root '/';
           ssl_certificate 'xxxx.pem';
           ssl_certificate_key 'xxxx.key';
           ssl_session_cache shared:SSL:1m;
           ssl_session_timeout  10m;
           ssl_ciphers PROFILE=SYSTEM;
           ssl_prefer_server_ciphers on;
           include /etc/nginx/default.d/*.conf;
           location / {
                proxy_pass http://127.0.0.1:5001;
           }
           error_page 404 /404.html;
               location = /40x.html {
           }
    
           error_page 500 502 503 504 /50x.html;
               location = /50x.html {
           }
       }
    
    

    然后启动nginx服务  systemctl restart nginx.service .如果配置文件写的有问题,服务会启动失败,错误日志位置在nginx.conf中可以找到

    服务启动完毕后,就可以看到效果了

  • 相关阅读:
    用Vue创建一个新的项目
    事件循环学习2
    事件循环学习笔记
    关于访问器属性
    bootstrap-datetimepicker时间控件
    前端的指导方针---css篇
    web移动端小tip,box-flex
    数组常用的几种方法
    ajax对一些没有接口的数据进行分析和添加方法
    JAVA静态代理和动态代理理解
  • 原文地址:https://www.cnblogs.com/zzfstudy/p/13557309.html
Copyright © 2011-2022 走看看