如何设计实现一个证书加密签名工具包-极客大学架构师训练营(架构师 黄燧)

说明

分享者:架构师 黄燧

主要内容有:算法介绍,签名验签,程序设计,OpenSSL证书生成、代码实现

算法介绍

这里主要用到两类算法,一个是加解密的,一个是消息摘要算法

加密算法

加密算法可分为对接加密和非对称加密算法。
对称加密,加解密都使用同一个密钥,运算速度快,比如AES。
非对称加密,加密和解密使用的不同的密钥(公钥和私钥),运算速度比较慢,比如RSA。

消息摘要算法

单向不可逆,生成特定长度的固定消息,比如MD5、SHA256。

签名和验签主要就基于这两种算法。
后面简单介绍下签名和验签,图片是网络上的。
在这里插入图片描述

这个过程是将一个文本进消息摘要计算,生成的文本就比较短,也是固定额.
在这里插入图片描述
这个是使用私钥对摘要消息进行加密.

因为私钥的特性,这个文本可以作为签名.
在这里插入图片描述
这个将消息和签名组合成已签名的消息.
这是正向过程.
在这里插入图片描述
这时用公钥对签名进行验签, 可以获取到签名私钥加密的消息摘要.

可以获取到前面私钥加密的消息摘要.
在这里插入图片描述
这个是将原消息进行摘要运算,比较两个摘要消息是否一样.
这个整个签名和验签过程就结束了.
下面说下程序设计,把签名验签和加解密结合起来.
程序包最终要实现基于证书的加密签名和验签解密两个功能。
会涉及到算法的选择,加密解密过程,证书的使用.

算法选择

消息加密选择:AES对称加密算法,对称加密算法比非对称加密算法快很多,适用于消息的加密。
签名算法选择:RSA非对称加密算法,SHA256消息摘要算法,非对称加密算法比较慢,组合使用可适应各种场景。

场景分析

前提:公钥证书需要提前发放给对方.

发送方

  1. 对消息使用AES算法加密
  2. 将加密消息作为基础文本,先进行SHA256摘要算法运算,再使用RSA私钥进行加密,得到签名。
  3. 将加密消息和签名组合成新的消息发送给对方

接收方

  1. 收到消息,使用RSA公钥对签名进行解密,成功即说明发送方即私钥持有方
  2. 解密后获得签名中的SHA256摘要值。
  3. 对消息中的加密消息进行SHA256摘要算法运算,获得加密消息的SHA256摘要值
  4. 将两个摘要值进行比较,如果相同,说明加密消息没有被修改
  5. 对加密的消息进行AES解密,获得原始消息

上面的过程中还存在一个问题,就是AES算法的密钥没有说明如何传送给对方。而且上面过程中只提到了单方面的RSA私钥和公钥,即发送方的RSA私钥和公钥。

AES的密钥(Key和盐)肯定不能用自己来加密,而且用发送方私钥加密也存在不安全因素,因为公钥很可能被非法使用。这样只剩用接收方提供的公钥来加密了,而且这是最安全的,接收方收到加密的AES密钥后使用其私钥进行解密即可。

基于以上思路,就可以做工具包的设计了。
正向过程
在这里插入图片描述
反向过程
在这里插入图片描述

证书

证书这里主要是用来提供私钥和公钥的,需要提前生成,放置在指定路径。

我们这里指定使用CER证书和PFX证书。
PFX证书是私钥证书,给自己应用使用,需要设置密码,不能直接打开。
CER证书是公钥证书,发放给客户方应用使用,可直接打开,里面是个明文的密钥。

证书的生成使用Openssl命令即可完成。

主要要做的就是定义和指定证书的基本信息,使用指定算法(比如RSA)生成私钥文件,使用私钥文件生成公钥和私钥证书等。

这里简单黏贴下生成证书的文件的命令,有兴趣的可以等下看我的文档地址。

2、生成证书

2.1 创建私钥privkey.pem

openssl genrsa -out privkey.pem 2048
# 或者
openssl genpkey -algorithm RSA -out privkey.pem

扩展参数:-des3

2.2 使用cnf配置创建证书申请文件req.pem

openssl req -new -key privkey.pem -out req.pem -config ca.cnf

2.3 创建cer证书

openssl req -x509 -key privkey.pem -out test.cer -config ca.cnf

扩展参数:-days 750

2.4创建pfx证书

openssl pkcs12 -export -in test.cer -inkey privkey.pem -out test.pfx
Export Password:123456

也可以直接到openssl官网去查看

代码实现

正向时序图
在这里插入图片描述
反向时序图
在这里插入图片描述
里面算法实现基本用的jdk包里的。

具体实现也有参考网络资源,但思想了解了,就知道如何做和做什么了。
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值