SSL原理

HTTPS SSL

问题描述

小程序中,网络请求,需要时https

spring boot 部署ssl

证书知识点

远古时代

不加密

上古时代

出现中间人攻击,于是加密出现。双方使用相同的密钥进行加密,被称为对称加密算法

密钥的确定不能通过网络,需要线下商定,否则可能会被截取。

密钥可能会被暴力破解,于是密钥的长度变长

DES (Data Encryption Standard) 56bits

triple-DES 168

AES 256

现代 非对称加密

最著名的算法:RSA算法

public key: 用来加密

private key: 用来解密

具体过程

A 有 public key, private key

B 有 public key, private key

private 保留在本地,public key发给对方

A 给 B发数据

1、A使用private key 加密数据的hash值

2、A使用B的public key加密数据。

3、A将加密的hash值和加密的数据再加上一些其他信息,发给B

4、B收到之后,使用private key 解密数据,运行得到hash值

5、使用A的public key解密hash值

6、对比hash值,以检验数据的完整性

非堆成加密仍然存在隐患

中间人 拦截双方的public key,换成自己的public key,然后在中间解密、加密

为了确保public key不被拦截,还需要线下传送public key

CA (Certificate Authority)

使得不用线下见面传送public key

流程:

1、B 将自己的public key(和一些其他信息)交给CA

2、CA用自己的private key加密这些 信息,得到数字证书

3、 现在B向A传递的public key 变为:B向A传送数字证书

4、 A收到以后,使用CA发布的CA证书(包含CA的public key),解密B的数字证书,得到B的public key

CA的安全性

CA证书 如果被劫持,换成攻击人自己伪造的CA证书,那么也可能被劫持

但是CA证书 时集成在浏览器 和操作系统 里的,不是通过网络获取的。

中间人可以拦截A和B的数字证书,也可以使用CA证书获得A和B的public key,但是中间人无法伪造出一个可以通过CA认证的数字证书

实际使用

1、非对称加密复杂,处理速度慢,所有消息都使用非对称加密的话,效率会很低

2、所以非对称加密只会用来传递一条消息,就是用于对称加密的密钥

3、对称加密的密钥确定了,A、B还是可以通过对称加密进行网络通信。

所以,在现代,A和B之间要进行安全,省心的网络通信,需要经过以下几个步骤

  • 通过CA体系交换public key
  • 通过非对称加密算法,交换用于对称加密的密钥
  • 通过对称加密算法,加密正常的网络通信

这基本就是SSL/TLS的工作过程了。

symmetric key 对称密钥

Asymmetric key 非对称密钥

keytool

keystore

1、密钥库

2、包含密钥 和 数字证书

3、密钥库有一个密码

spring boot部署ssl

properties.yaml

server:
  port: 8443                            # 指定端口
  ssl:
    key-store: classpath:tql.zone.jks   # 指定密钥库
    key-store-password: wuxiaolan@2     # 密钥库密码
    keyStoreType: JKS                   # 密钥库类型

自动跳转

package com.example.smarttext.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;

@Configuration
public class HttpsConfig {

    /**
     * spring boot 2.0
     * @return
     */
    @Bean
    public TomcatServletWebServerFactory servletContainer() {
        TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
            @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);
            }
        };
        tomcat.addAdditionalTomcatConnectors(httpConnector());
        return tomcat;
    }

    @Bean
    public Connector httpConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        //Connector监听的http的端口号
        connector.setPort(8080);
        connector.setSecure(false);
        //监听到http的端口号后转向到的https的端口号
        connector.setRedirectPort(8443);
        return connector;
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值