array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 Spring Boot 使用SSL-HTTPS - 爱码网
bryantzx
Spring Boot 使用SSL-HTTPS

一、什么是SSL?

       SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。

       SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层:SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

1.1 提供服务

1)认证用户和服务器,确保数据发送到正确的客户机服务器

2)加密数据以防止数据中途被窃取;

3)维护数据的完整性,确保数据在传输过程中不被改变。

 

二、什么是HTTPS?

       HTTPS(Hypertext Transfer Protocol Secure安全超文本传输协议

它是由Netscape开发并内置于其浏览器中,用于对数据进行压缩和解压操作,并返回网络上传送回的结果。HTTPS实际上应用了Netscape的完全套接字层(SSL)作为HTTP应用层的子层。(HTTPS使用端口443,而不是象HTTP那样使用端口80来和TCP/IP进行通信。)SSL使用40 位关键字作为RC4流加密算法,这对于商业信息的加密是合适的。HTTPS和SSL支持使用X.509数字认证,如果需要的话用户可以确认发送者是谁。。

       以上资料参考《百度百科

 

三、HTTPS与SSL的关系?

       HTTPS与SSL的关系是包含与被包含的关系,简单来说,HTTPS=HTTP+SSL。也就是说HTTPS是在HTTP上面加了一层SSL协议,在HTTP站点上部署SSL数字证书就变成了HTTPS。

根据HTTPS与SSL的含义可以看出:SSL在HTTPS协议栈中负责实现上面提到的加密层。

 

四、Spring Boot中使用HTTPS步骤

(1)要有一个SSL证书,证书怎么获取呢?买(通过证书授权机构购买)或者自己生成(通过keytool生成)。

(2)在spring boot中启用HTTPS

(3)将HTTP重定向到HTTPS(可选)

 

五、获取SSL证书

       有两种方式可以获取到SSL证书:

(1)自己通过keytool生成;

(2)通过证书授权机构购买;

       这里作为演示,采用keytool生成,实际项目中大部分采用的都是购买的方式。

       那么怎么使用keytool生成呢?

       Keytool是java提供的证书生成工具,如果配置了java_home的,直接就可以在控制台进行生成了,这里演示使用的是window的dos窗口:

(1)打开dos窗口;

(2)输入如下命令:

Command代码  
keytool -genkey -alias tomcat -dname "CN=Andy,OU=kfit,O=kfit,L=HaiDian,ST=BeiJing,C=CN"  -storetype PKCS12 -keyalg RSA -keysize 2048  -keystore keystore.p12 -validity 365 

  

 

Java代码  
<span style=" font-family: Helvetica, Tahoma, Arial, sans-serif;">  </span>  

  

这里解释下命令的各个参数的含义:

-genkey:生成key;

-alias:key的别名;

-dname:指定证书拥有者信息

-storetype:密钥库的类型为JCEKS。常用的有JKS(默认),JCEKS(推荐),PKCS12,BKS,UBER。每个密钥库只可以是其中一种类型。

-keyalg:DSA或RSA算法(当使用-genkeypair参数),DES或DESede或AES算法(当使用-genseckey参数);

-keysize:密钥的长度为512至1024之

间(64的倍数)

-keystore   :证书库的名称

-validity   : 指定创建的证书有效期多少天

dname的值详解:

  CN(Common Name名字与姓氏)

  OU(Organization Unit组织单位名称)

  O(Organization组织名称)

  L(Locality城市或区域名称)

  ST(State州或省份名称)

  C(Country国家名称)      

这时候在目录:C:\Users\Administrator下就会看到一个文件keystore.p12。到这里SSL证书就有了。

 

 

六、Spring Boot中启用HTTPS

       默认情况下Spring Boot内嵌的Tomcat服务器会在8080端口启动HTTP服务,Spring Boot允许在application.properties中配置HTTP或HTTPS,但是不可同时配置,如果两个都启动,至少有一个要以编程的方式配置,Spring Boot官方文档建议在application.properties中配置HTTPS,因为HTTPS比HTTP更复杂一些

在application.properties中配置HTTPS,配置信息如下:

Properties代码  

 

#https端口号.  
server.port: 443  
#证书的路径.  
server.ssl.key-store: classpath:keystore.p12  
#证书密码,请修改为您自己证书的密码.  
server.ssl.key-store-password: 123456  
#秘钥库类型  
server.ssl.keyStoreType: PKCS12  
#证书别名  
server.ssl.keyAlias: tomcat  

  

       注意:请将在上一步生成的证书放到src/main/resources目录下。

       到这里,启动运行程序,随便访问一个地址,比如:https://127.0.0.1/hello 就可以访问了,倒是访问http://127.0.0.1/hello 是不能够访问的,如果要支持http也访问的话,那么还需要如下的步骤进行配置,否则对于https的内容到此就配置完成了。

 

六、将HTTP请求重定向到HTTPS(可选)

上面说了不能同时在application.properties中同时配置两个connector,所以要以编程的方式配置HTTP connector,然后重定向到HTTPS connector,完整代码如下:

Java代码  

 

package com.kfit.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.boot.context.embedded.EmbeddedServletContainerFactory;  
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;  
import org.springframework.context.annotation.Bean;  
import org.springframework.context.annotation.Configuration;  
   
@Configuration  
public class TomcatHttpConfig {  
     
    /** 
     * 配置内置的servlet容器工厂为tomcat. 
     * @return 
     */  
    @Bean  
    public EmbeddedServletContainerFactory servletContainer() {  
      TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory() {  
   
           @Override  
           protected void postProcessContext(Context context) {  
   
              SecurityConstraint securityConstraint = new SecurityConstraint();  
              securityConstraint.setUserConstraint("CONFIDENTIAL");  
              SecurityCollection collection = new SecurityCollection();  
              collection.addPattern("/*");  
              securityConstraint.addCollection(collection);  
              context.addConstraint(securityConstraint);  
           }  
       };  
       //添加连接配置,主要是http的配置信息.  
       tomcat.addAdditionalTomcatConnectors(initiateHttpConnector());  
       return tomcat;  
    }  
     
    /**  
     * 配置一个http连接信息.  
     * @return  
     */  
    private Connector initiateHttpConnector() {  
       Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");  
       connector.setScheme("http");  
       connector.setPort(8080);  
       connector.setSecure(false);  
       connector.setRedirectPort(443);  
       return connector;  
    }  
}  

  

       这时候重新启动运用程序,访问地址:http://127.0.0.1:8080/hello 就会被重定向到地址:https://127.0.0.1/hello,在浏览器的地址栏最终看到的也是带有https的地址。

 

七、总结

       在spring boot中要使用https的话,那么重要的就是几个步骤:

(1)备书:准备SSL证书,买或者生--(购买/自己生成)。

(2)配置:在application.properties配置HTTPS信息。

(3)重定向:将HTTP请求重定向到HTTPS(可选)。

 

posted on 2019-02-13 08:56 Problem_Oriented 阅读(...) 评论(...) 编辑 收藏

相关文章:

  • 2021-10-29
  • 2019-07-17
  • 2018-12-20
  • 2019-09-30
  • 2018-11-12
  • 2019-07-22
  • 2019-07-04
  • 2018-11-02
猜你喜欢
  • 2019-08-16
  • 2019-06-27
  • 2018-01-24
  • 2019-07-01
  • 2018-05-21
  • 2019-06-27
  • 2021-10-04
相关资源
相似解决方案