借助keystrore 实现springboot https服务端

一般来讲大家在平常的工作中接触比较多的就是http协议,那么大家肯定对http协议的相关内容都比较熟悉,下面就说一下https协议

一、Https协议

1.HTTP(Hypertext transfer protocal)是一种详细规定了浏览器和万维网服务器之间相互通信的规则,通过因特网传送万维网文档的数据传送协议。
2.HTTPS(Hypertext transfer protocal over Secure Socket Layer)是以安全为目标的http通道,https的安全基础是ssl,因此加密的详细内容就需要ssl。https协议需要到ca申请证书(一般免费的证书很少)。
3.http是超文本传输协议,信息是明文传输的(http协议是不安全的,黑客可以在用户和服务器之间设置拦截器窃取传输的内容。也可以伪造用户提交的表单向服务器发出请求,从而获取到服务器的响应)。https则是具有安全性的ssl加密传输协议,http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

超文本传输安全协议(Https,也被称作HTTP over TLS, HTTP over SSL或者HTTP Secure)是一种网络安全的传输协议,SSL(Secure Socket Layer,安全套接字层),TLS(Transport Layer Security,传输层安全协议),HTTPS开发的主要目的,是提供对网络服务器的认证,保证交换信息的机密性和完整性。

二、 http和https的协议层异同

SSL是位于可靠的面向连接的网络层协议和应用层协议之间的一种协议。SSL通过相互认证、使用数字签名保证完整性、使用加密确私密性,以实现客户端和服务器之间的安全通讯。该协议由两层组成:SSL加密协议和SSL握手协议。SSL的核心概念:加密算法,数字证书,CA。
TLS用于确保两个通用程序之间提供保密性和数据完整性。该协议由两层组成:TLS记录协议和TLS握手协议(TLS是传输层加密协议,它的前身是SSL协议,如果没有特殊要求,可以简单理解为TLS和SSL都属于同一协议)。

三、样例

3.1借助keystore生成自己的证书

在windows找到自己的jdk的bin目录下执下面的命令,就可以得到自己的证书test.p12

keytool -genkey -alias anyname -storetype PKCS12 -keyalg RSA -keysize 2048  -keystore E:\test.p12 -validity 3650
 

 3.2新建Spring项目把证书放到resources目录的store目录下

 3.2.1接下来配置项目的application.yml文件

server:
  port: 443
  ssl:
    key-store: classpath:store/test.p12
    key-alias: anyname # 证书别名
    key-store-type: PKCS12 # P12证书格式
    key-store-password: 123456 #导出时设置的密码
spring:
  application:
    name: springbootDemo

 建立一个测试类

package com.dc.esb;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @auther zhanggt
 */
@RestController
public class controller {
    @GetMapping("/demo")
    private String test(){
        return "hello ssl";
    }
}

测试结果

到此就出现了新问题,既然你们的服务器是https协议那么http协议也应该是准转到https,看了资料springboot对这个也有支持

下面 就来写个配置类来实现

package com.dc.esb.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.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @auther zhanggt
 */
@Configuration
public class HttpToHttpsConfigs {

    /**
     * 获取Http连接器
     * @return Connector
     */
    public Connector getHttpConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http"); // 使用http协议
        connector.setSecure(false); // 非安全传输
        connector.setPort(80); // HTTP监听端口
        connector.setRedirectPort(8080); // 重定向端口
        return connector;
    }

    @Bean
    public TomcatServletWebServerFactory tomcatServletWebServerFactory() {
        TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
            @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);
            }
        };
        tomcat.addAdditionalTomcatConnectors(getHttpConnector()); // 添加连接器
        return tomcat;
    }
}

测试用这个地址访问:http://127.0.0.1/demo

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一人荡江湖@

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值