一、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,需要将其注释掉,不然无法启动服务。
1 /** 2 * @Title: HttpsPort.java 3 * @Description: 添加https 4 * @author zxj 5 * @version V1.0 6 */ 7 package com.ewp.data.config; 8 9 import org.apache.catalina.Context; 10 import org.apache.catalina.connector.Connector; 11 import org.apache.tomcat.util.descriptor.web.SecurityCollection; 12 import org.apache.tomcat.util.descriptor.web.SecurityConstraint; 13 import org.springframework.beans.factory.annotation.Value; 14 import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory; 15 import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory; 16 import org.springframework.context.annotation.Bean; 17 import org.springframework.stereotype.Component; 18 19 /** 20 * @ClassName: HttpsPort 21 * @Description: 添加https 22 * @date 2018年3月14日 23 * 24 */ 25 @Configuration 26 public class HttpsPort { 27 28 @Value("${server.port}") 29 private int sPort; 30 31 @Value("${http.port}") 32 private int hPort; 33 34 private static class Tomcat extends TomcatEmbeddedServletContainerFactory{// 静态内部类 35 @Override 36 protected void postProcessContext(Context context) { 37 SecurityConstraint constraint = new SecurityConstraint(); 38 constraint.setUserConstraint("CONFIDENTIAL"); 39 SecurityCollection collection = new SecurityCollection(); 40 collection.addPattern("/*"); 41 constraint.addCollection(collection); 42 context.addConstraint(constraint); 43 } 44 } 45 46 @Bean 47 public EmbeddedServletContainerFactory servletContainer() {// 创建新的tomcat示例,指向定义的http连接 48 Tomcat tomcat = new Tomcat(); 49 tomcat.addAdditionalTomcatConnectors(httpConnector()); 50 return tomcat; 51 } 52 53 @Bean 54 public Connector httpConnector() { 55 Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol"); 56 connector.setScheme("http"); 57 connector.setPort(hPort); 58 connector.setSecure(false); 59 connector.setRedirectPort(sPort); 60 return connector; 61 } 62 63 }
Nginx配置:
1.打开linux下Nginx安装目录找到配置文件nginx.conf(一般路径为:/usr/local/nginx/conf)进行如下配置
1 # HTTPS server 2 server { 3 listen 443 ssl;#网页浏览端口,主要是用于HTTPS服务 4 server_name www.asquirrel.cn asquirrel.cn;#顶级域名,二级域名 5 ssl on; 6 ssl_certificate 1_asquirrel.cn_bundle.crt;#证书路径 7 ssl_certificate_key 2_asquirrel.cn.key;#证书秘钥路径 8 ssl_session_timeout 5m; 9 fastcgi_param HTTPS on; 10 fastcgi_param HTTP_SCHEME https; 11 location / { 12 proxy_pass https://ewp_web_contract; #代理转发的路径 13 proxy_redirect default; 14 proxy_set_header Host $host; 15 proxy_set_header X-Real-IP $remote_addr; 16 proxy_set_header X-Forwarded-for $proxy_add_x_forwarded_for; 17 proxy_set_header X-Forwarded-Proto https; 18 error_page 502 = /500.html; 19 } 20 21 }
2.将下载好的证书放在与nginx.conf同级目录下,可新建文件夹,也可不建。证书用Nignx文件夹下的,不要用其他文件夹下的
3.监听80端口,转发请求
1 server { 2 listen 80; 3 server_name asquirrel.cn;#访问的路径 4 if ($host != 'www.asquirrel.cn') { 5 rewrite ^/(.*)$ https://www.asquirrel.cn/$1 permanent;#转发的路径 6 } 7 8 }
4.项目web模块需做如下配置(主要作用于项目内部进行https交互)
第一:添加tomcat文件夹下的证书
第二:配置application.properties
5.重启项目web层服务和Nignx,访问域名就可以看到浏览器显示安全标志