加密类型、数据加密解密过程以及CA创建
对称加密算法
- 对称加密:加密和解密使用同一个密钥
- DES:Data Encryption Standard,56bits
- 3DES:
- AES:Advanced (, , 256bits)
- Blowfish,Twofish
- IDEA,RC6,CAST5
- 特性:
- 、加密、解密使用同一个密钥,效率高
- 、将原始数据分割成固定大小的块,逐个进行加密
- 缺陷:
- 、密钥过多
- 、密钥分发
- 、数据来源无法确认
非对称加密算法
- 公钥加密:密钥是成对出现
- 公钥:公开给所有人;public key
- 私钥:自己留存,必须保证其私密性;secret key
- 特点:用公钥加密数据,只能使用与之配对的私钥解密;反之亦然
- 功能:
- 数字签名:主要在于让接收方确认发送方身份
- 对称密钥交换:发送方用对方的公钥加密一个对称密钥后发送给对方
- 数据加密:适合加密较小数据
- 缺点:密钥长,加密解密效率低下
- 算法:
- RSA(加密,数字签名)
- DSA(数字签名)
- ELGamal
单向散列(hash算法)
- 将任意数据缩小成固定大小的“指纹”
- 任意长度输入
- 固定长度输出
- 若修改数据,指纹也会改变(“不会产生冲突”)
- 无法从指纹中重新生成数据(“单向”)
- 功能:数据完整性
- 常见算法
- md5: 128bits、sha1: 160bits、sha224 、sha256、sha384、sha512
- 常用工具
- md5sum | sha1sum [ --check ] file
- openssl、gpg
- rpm -V
- hash(data)=digest 摘要,有时候也称为指纹 只要数据不同摘要必不同,得到摘要推不出原来的数据值
- 不论什么数据。不论数据的大小,只要用的算法相同,那么输出长度必定相同
- 只要数据不同,摘要完全不同,哪怕数据之间只相差一个空格字符都会产生巨大的变化也称雪崩效应
- 常用于对比数据,数据是否被修改过,数据相同,摘要必定相同
- 文件完整性的两种实施方式
- 被安装的文件
- md5单向hash
- rpm -V package-name
- 例:修改文件内容查看hash
- rpm -qf /etc/issue
- centos-release--6.1810..el7.centos.x86_64
- rpm -V centos-release
- missing c /etc/yum.repos.d/CentOS-Base.repo
- missing c /etc/yum.repos.d/CentOS-CR.repo
- echo >> /etc/issue
- rpm -V centos-release
- ......T. c /etc/issue :5就表示md5,说明文件内容变了,T表示文件的时间变了
- missing c /etc/yum.repos.d/CentOS-Base.repo
- missing c /etc/yum.repos.d/CentOS-CR.repo
- 然后将追加的1删掉。再次比较
- rpm -V centos-release
- .......T. c /etc/issue :文件内容恢复。但是时间改变了
- missing c /etc/yum.repos.d/CentOS-Base.repo
- missing c /etc/yum.repos.d/CentOS-CR.repo
- 发行的软件包文件
- GPG公钥签名
- rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-
- rpm -K tree-1.6.-.el7.x86_64.rpm
- 如果不导入公钥,系统提示没有公钥,不能检查,如果有问题提示NOT OK
CA和证书
- PKI: Public Key Infrastructure
- 签证机构:CA(Certificate Authority)
- 注册机构:RA
- 证书吊销列表:CRL
- 证书存取库:
- X.:定义了证书的结构以及认证协议标准
- 版本号 主体公钥
- 序列号 CRL分发点
- 签名算法 扩展信息
- 颁发者 发行者签名
- 有效期限
- 主体名称
证书获取
- 证书类型:
- 证书授权机构的证书
- 服务器
- 用户证书
- 获取证书两种方法:
- 使用证书授权机构
- 生成证书请求(csr)
- 将证书请求csr发送给CA
- CA签名颁发证书
- 自签名的证书
- 自已签发自己的公钥
安全协议
- SSL:Secure Socket Layer,TLS: Transport Layer Security (安全套接层)
- :SSL 2.0 Netscape
- :SSL 3.0
- :TLS 1.0
- :TLS 1.1 IETF(Internet工程任务组) RFC
- :TLS 1.2 当前使用
- :TLS 1.3
- 功能:机密性,认证,完整性,重放保护
- 两阶段协议,分为握手阶段和应用阶段
- 握手阶段(协商阶段):客户端和服务器端认证对方身份(依赖于PKI体系,利用数字
- 证书进行身份认证),并协商通信中使用的安全参数、密码套件以及主密钥。后续通信使
- 用的所有密钥都是通过MasterSecret生成。
- 应用阶段:在握手阶段完成后进入,在应用阶段通信双方使用握手阶段协商好的密
- 钥进行安全通信
- SSL/TLS
- Handshake协议:包括协商安全参数和密码套件、服务器身份认证(客户端身
- 份认证可选)、密钥交换
- ChangeCipherSpec 协议:一条消息表明握手协议已经完成
- Alert 协议:对握手协议中一些异常的错误提醒,分为fatal和warning两个级别,
- fatal类型错误会直接中断SSL链接,而warning级别的错误SSL链接仍可继续,
- 只是会给出错误警告
- Record 协议:包括对消息的分段、压缩、消息认证和完整性保护、加密等
- HTTPS 协议:就是“HTTP 协议”和“SSL/TLS 协议”的组合。HTTP over
- SSL”或“HTTP over TLS”,对http协议的文本数据进行加密处理后,成为二
- 进制形式传输
OpenSSL
- OpenSSL:开源项目
- 三个组件:
- openssl:多用途的命令行工具,包openssl
- libcrypto:加密算法库,包openssl-libs
- libssl:加密模块应用库,实现了ssl及tls,包nss
- openssl命令:
- 两种运行模式:交互模式和批处理模式
- openssl version:程序版本号
- 标准命令、消息摘要命令、加密命令
- 标准命令:enc, ca, req, ...
openssl命令
- 对称加密:
- 工具:openssl enc, gpg
- 算法:3des, aes, blowfish, twofish
- enc命令:
- 帮助:man enc
- 加密:
- openssl enc -e -des3 -a -salt -in testfile -out testfile.cipher
- 解密:
- openssl enc -d -des3 -a -salt –in testfile.cipher -out testfile
- openssl ?
- 单向加密:
- 工具:md5sum, sha1sum, sha224sum,sha256sum…
- openssl dgst
- dgst命令:
- 帮助:man dgst
- openssl dgst -md5 [-hex默认] /PATH/SOMEFILE
- openssl dgst -md5 testfile
- md5sum /PATH/TO/SOMEFILE
- MAC: Message Authentication Code,单向加密的一种延伸应用,用于实现
- 网络通信中保证所传输数据的完整性机制
- CBC-MAC
- HMAC:使用md5或sha1算法
- 生成用户密码:
- passwd命令:
- 帮助:man sslpasswd
- openssl passwd - -salt SALT(最多8位)
- openssl passwd - –salt centos
- –salt:打乱生成的hash值,正常使用md5生成的hash值只要数据相同
- hash值就相同添加–salt严之后就可以打乱hash值即使数据一样hash
- 值也是不一样的
- 生成随机数:
- 帮助:man sslrand
- openssl rand -base64|-hex NUM
- NUM: 表示字节数,使用-hex,每个字符为十六进制,相当于4位二进制,出现的字符数为NUM*
- 公钥加密:
- 算法:RSA, ELGamal
- 工具:gpg, openssl rsautl(man rsautl)
- 数字签名:
- 算法:RSA, DSA, ELGamal
- 密钥交换:
- 算法:dh
- DSA:Digital Signature Algorithm
- DSS:Digital Signature Standard
- RSA:
- 生成密钥对儿:man genrsa
- 生成私钥
- openssl genrsa -out /PATH/TO/PRIVATEKEY.FILE NUM_BITS
- (umask ; openssl genrsa –out test.key –des )
- openssl rsa -in test.key –out test2.key 将加密key解密
- 从私钥中提取出公钥
- openssl rsa -in PRIVATEKEYFILE –pubout –out PUBLICKEYFILE
- openssl rsa –in test.key –pubout –out test.key.pub
- 随机数生成器:伪随机数字
- 键盘和鼠标,块设备中断
- /dev/random:仅从熵池返回随机数;随机数用尽,阻塞
- /dev/urandom:从熵池返回随机数;随机数用尽,会利用软件生成伪随机数,非阻塞
创建CA和申请证书
- openssl的配置文件:/etc/pki/tls/openssl.cnf
- 配置文件中有对应的语句块,定义默认CA,也可以添加CA,CA的默认设置
- 文件中关于CA的选项策略,搭建CA时需要指定的信息(国家,城市,公司等等)
- match:要求申请填写的信息和CA设置信息必须一致
- optional:可有可无,和CA设置信息可不一致
- supplied:必须填写这项申请信息
- 将来客户端申请填写时要注意以上字段,需要填写一致,否则报错
- 、创建所需要的文件
- touch /etc/pki/CA/index.txt :生成证书索引数据库文件
- echo > /etc/pki/CA/serial:指定第一个颁发证书的序列号
- 、CA自签证书
- 生成私钥
- cd /etc/pki/CA/
- (umask ;openssl genrsa -out private/cakey.pem ) :安全
- 、生成自签名证书:
- openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days -out /etc/pki/CA/cacert.pem
- 回车后输入CA的信息,地区(两个字符,例CN),公司,CA的域名,邮箱(可选项)
- 选项说明:
- -new:生成新证书签署请求
- -x509:专用于CA生成自签证书
- -key:生成请求时用到的私钥文件
- -days n:证书的有效期限
- -out /path/to/file:证书的保存路径
- 客户端创建私钥申请证书:
- 、创建私钥
- (umask ;openssl genrsa -out http.key )
- 、利用私钥生成证书申请
- openssl req -new -key /data/http.key -out /data/http.csr
- 回车后输入相关信息,默认国家,城市,和公司这三项必须填写一样。部门是自定义的,主机名也是自定以,输入将来你要作为域名的那个名字。
- 、将生成的申请发送到CA服务器
- scp http.csr 服务器IP:/tmp/
- 服务端CA签署证书,并将证书颁发给请求者
- 、生成证书
- openssl ca -in /tmp/http.csr -out /etc/pki/CA/certs/http.crt -days
- 回车后输入信息,默认要求国家,省,公司三项必须和CA一致
- 、将证书版发给请求者客户端
- scp /etc/pki/CA/certs/http.crt 客户端IP:/data/
- 至此证书申请完毕,使用证书是应用软件中实现,在软件例如httpd中添加此证书的路径就可以用了
- 查看证书中的信息
- openssl x509 -in /path/to/file.crt -noout -test|issuer|subject|serial|dates
- 例:openssl x509 -in /data/http.crt -noout -text
- openssl ca -status SERIAL :查看指定编号的证书状态
加密类型、数据加密解密过程以及CA创建的更多相关文章
- mcrypt加密以及解密过程
Mcrypt库支持20多种加密算法和8种加密模式,具体可以通过函数mcrypt_list_algorithms()和mcrypt_list_modes()来显示 Mcrypt扩展库可以实现加密解密功能 ...
- ASP.NET中的DEC加密解密过程
本文章分享自 青青果树园的博客,地址是:http://www.cnblogs.com/qqingmu/archive/2008/01/10/1034168.html 我们做网页时经常会遇到URL传输( ...
- Python实现AES的CBC模式加密和解密过程详解 和 chr() 函数 和 s[a:b:c] 和函数lambda
1.chr()函数 chr() 用一个范围在 range(256)内的(就是0-255)整数作参数,返回一个对应的字符. 2.s[a:b:c] s=(1,2,3,4,5) 1>. s[a]下标访 ...
- https的加密解密过程
前置知识 SSL是90年代Netscape弄出来的一套东西,为的是解决HTTP协议明文传输数据的问题.后来SSL慢慢成了事实上的标准,于是IETF就把SSL标准化了,名字叫做TLS,TLS 1.0其实 ...
- golang实现aes-cbc-256加密解密过程记录
我为什么吃撑了要实现go的aes-cbc-256加密解密功能? 之前的项目是用php实现的,现在准备用go重构,需要用到这个功能,这么常用的功能上网一搜一大把现成例子,于是基于go现有api分分钟实现 ...
- springmvc在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常处理器可以实现一个系统的异常处理逻辑。为了区别不同的异常通常根据异常类型自定义异常类,这里我们创建一个自定义系统异常,如果controller、service、dao抛出此类异常说明是系统预期处理的异常信息。
springmvc在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常处理器可以实现一个系统的异常处理逻辑. 1.1 异常处理思路 系统中异常包括两类:预期异常和运行时异常RuntimeEx ...
- des加密解密——java加密,php解密
最近在做项目中,遇到des加密解密的问题. 场景是安卓app端用des加密,php这边需要解密.之前没有接触过des这种加密解密算法,但想着肯定会有demo.因此百度,搜了代码来用.网上代码也是鱼龙混 ...
- Java 前端加密传输后端解密以及验证码功能
目录(?)[-] 加密解密 1 前端js加密概述 2 前后端加密解密 21 引用的js加密库 22 js加密解密 23 Java端加密解密PKCS5Padding与js的Pkcs7一致 验证码 1 概 ...
- RSA前台js加密,后台C#解密
一.需求: 为了安全,项目中前台登陆用的密码需要加密传到后台,后台c#解密登陆密码. 二.解决方案 采用非对称加密算法RSA来达到目的,前台登陆页面一加载便发送一次ajax请求获取后台产生的公钥,用于 ...
随机推荐
- 二进制和ASCII文件的区别
二进制和ASCII文件的区别 觉得有用的话,欢迎一起讨论相互学习~Follow Me 版权声明:本文为CSDN博主「迂者-贺利坚」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出 ...
- plsql 引用型变量
set serveroutput on declare pename emp.ename%type; psal emp.sal%type; begin ; dbms_output.put_line(p ...
- 必备Linux命令
文章来源:https://macrozheng.github.io/mall-learning/#/reference/linux 开发者必备Linux命令 开发者必备Linux常用命令,掌握这些命令 ...
- LeetCode_441. Arranging Coins
441. Arranging Coins Easy You have a total of n coins that you want to form in a staircase shape, wh ...
- Swift编码总结3
1.编码转换: dataString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) ?? "" re ...
- vagrant报错处理
vagrant up报错 Warning: Authentication failure. Retrying...解决方案 http://www.cnblogs.com/zqifa/p/vagrant ...
- [LeetCode] 557. Reverse Words in a String III 翻转字符串中的单词 III
Given a string, you need to reverse the order of characters in each word within a sentence while sti ...
- LeetCode:接雨水【42】
LeetCode:接雨水[42] 题目描述 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水. 上面是由数组 [0,1,0,2,1,0,1,3,2,1, ...
- 西门子PLC1200内使用SCL实现简化版PID算法
西门子自带的PID效果很好,但是会比较吃性能,使用次数有限,很多地方需要PID但不需要这么精准的PID,所以网上找个简单的算法自己调用. 新建数据类型 前三个就是PID三个参数 新建FC块: #PID ...
- Mac和window实现双向数据传输
Mac和window实现双向数据传输 总体步骤:第一步,在window上设置开发访问权限,然后选择要共享的磁盘或者文件夹第二步,在Mac上使用 Finder里面的网络,command+K,选择一个IP ...