• Springcloud/Springboot项目绑定域名,使用Nginx配置Https


    https://blog.csdn.net/a_squirrel/article/details/79729690

    一、Https 简介(百度百科)

        HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。这个系统的最初研发由网景公司(Netscape)进行,并内置于其浏览器Netscape Navigator中,提供了身份验证与加密通讯方法。现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。  

    二、Springcloud添加 https

    直接配置(无Nginx):

        1. 首先需要SSL证书,可以自己生成(浏览器不认可),也可购买。

        2. 自己生成方法(不推荐):https://www.cnblogs.com/zhangzb/p/5200418.html

        3. 免费一年证书(推荐):https://buy.cloud.tencent.com/ssl?fromSource=ssl

        4. 下载完成后解压目录如下:

          springcloud(springboot)一般默认嵌入tomcat中间件(服务器),如果有其他中间件选择对应文件夹下就好。

        

       tomcat打开如下:.jks证书文件, keystorePass.txt 为证书秘钥

       

     5. 将证书文件放入要添加https服务的resources下,一般为web层服务,然后打开springcloud(springboot)配置文件application/bootstarp.yml(properties)

      

      server.port  注册服务端口也是项目访问端口   server.ssl.key-store 证书路径   server.ssl.key-store-password 秘钥(.txt中内容)  http.port 做转发的端口,如果不做端口转发可以不用配置,名字可以随便起 ,端口号也可自定义(不要冲突就好)。接下来直接启动服务即可,然后即可用https://+项目路径,进行访问。

       6. https配置类编写(不做端口转发可以不写)

     注意:如果项目配置文件中同时有management.port,需要将其注释掉,不然无法启动服务。

    /**
    * @Title: HttpsPort.java
    * @Description: 添加https
    * @author zxj
    * @version V1.0
    */
    package com.ewp.data.config;
    
    import org.apache.catalina.Context;
    import org.apache.catalina.connector.Connector;
    import org.apache.tomcat.util.descriptor.web.SecurityCollection;
    import org.apache.tomcat.util.descriptor.web.SecurityConstraint;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory;
    import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
    import org.springframework.context.annotation.Bean;
    import org.springframework.stereotype.Component;
    
    /**
     * @ClassName: HttpsPort
     * @Description: 添加https
     * @date 2018年3月14日
     *
     */
    @Configuration 
    public class HttpsPort {
    	
    	@Value("${server.port}")
    	private  int sPort;
    	
    	@Value("${http.port}")
    	private  int hPort;
    	
    	private static class Tomcat extends TomcatEmbeddedServletContainerFactory{// 静态内部类
    		@Override
    	    protected void postProcessContext(Context context) {
    	        SecurityConstraint constraint = new SecurityConstraint();
    	        constraint.setUserConstraint("CONFIDENTIAL");
    	        SecurityCollection collection = new SecurityCollection();
    	        collection.addPattern("/*");
    	        constraint.addCollection(collection);
    	        context.addConstraint(constraint);
    	    }
    	}
    	
    	@Bean
        public EmbeddedServletContainerFactory servletContainer() {// 创建新的tomcat示例,指向定义的http连接
    		Tomcat tomcat = new Tomcat();
            tomcat.addAdditionalTomcatConnectors(httpConnector());
            return tomcat;
    	}
    	
    	@Bean
        public Connector httpConnector() {
            Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
            connector.setScheme("http");
            connector.setPort(hPort);       
            connector.setSecure(false);
            connector.setRedirectPort(sPort);
            return connector;
        }
    	
    }
    有Nginx配置:

    1.打开linux下Nginx安装目录找到配置文件nginx.conf(一般路径为:/usr/local/nginx/conf)进行如下配置

    # HTTPS server    
        server {
            listen       443 ssl;#网页浏览端口,主要是用于HTTPS服务
            server_name  www.asquirrel.cn asquirrel.cn;#顶级域名,二级域名
    	ssl on;
            ssl_certificate 1_asquirrel.cn_bundle.crt;#证书路径
            ssl_certificate_key 2_asquirrel.cn.key;#证书秘钥路径
            ssl_session_timeout  5m;
    	fastcgi_param   HTTPS               on;
    	fastcgi_param   HTTP_SCHEME         https;
            location / {	   
    	    proxy_pass https://ewp_web_contract; #代理转发的路径
    	    proxy_redirect default;
    	    proxy_set_header Host $host;
    	    proxy_set_header X-Real-IP $remote_addr;
    	    proxy_set_header X-Forwarded-for $proxy_add_x_forwarded_for;
    	    proxy_set_header X-Forwarded-Proto https;
    	    error_page 502 = /500.html;	   
            }
    	
        }

    2.将下载好的证书放在与nginx.conf同级目录下,可新建文件夹,也可不建

    证书用Nignx文件夹下的,不要用其他文件夹下的

    3.监听80端口,转发请求

    server {
            listen       80;
            server_name  asquirrel.cn;#访问的路径
    	if ($host != 'www.asquirrel.cn') {
    		rewrite ^/(.*)$ https://www.asquirrel.cn/$1 permanent;#转发的路径
    	}			  
            
        }

    4.项目web模块需做如下配置(主要作用于项目内部进行https交互)

    第一:添加tomcat文件夹下的证书

    第二:配置application.properties

    五:重启项目web层服务和Nignx,访问域名就可以看到浏览器显示安全标志

    GitHub:https://github.com/acutesquirrel/spring-cloud/tree/master/add-https

  • 相关阅读:
    扩展JSON
    字符串格式化---- String.prototype.format
    HigntChats应用举例--报表
    django Form组件之解决数据无法动态显示之BUG----以博客园添加新随笔页为主
    报错:jquery3.1.1报错Uncaught TypeError: a.indexOf is not a function
    HDU 6166 Senior Pan(多校第九场 二进制分组最短路)
    HDU 6069 Counting Divisors(区间素数筛法)
    hdu 6058 Kanade's sum (计算贡献,思维)
    HDU 6052 To my boyfriend(容斥+单调栈)
    HDU 6041 I Curse Myself(点双联通加集合合并求前K大) 2017多校第一场
  • 原文地址:https://www.cnblogs.com/chengjun/p/9318891.html
Copyright © 2020-2023  润新知