欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

加密类型、数据加密解密过程以及CA创建

程序员文章站 2022-04-01 17:58:13
对称加密算法 非对称加密算法 单向散列(hash算法) CA和证书 证书获取 安全协议 OpenSSL openssl命令 创建CA和申请证书 ......

对称加密算法 

 1     对称加密:加密和解密使用同一个密钥 
 2         des:data encryption standard,56bits 
 3         3des: 
 4         aes:advanced (128, 192, 256bits) 
 5         blowfish,twofish 
 6         idea,rc6,cast5 
 7     特性: 
 8         1、加密、解密使用同一个密钥,效率高 
 9         2、将原始数据分割成固定大小的块,逐个进行加密 
10     缺陷: 
11         1、密钥过多 
12         2、密钥分发 
13         3、数据来源无法确认 

非对称加密算法 

 1     公钥加密:密钥是成对出现 
 2         公钥:公开给所有人;public key 
 3         私钥:自己留存,必须保证其私密性;secret key 
 4     特点:用公钥加密数据,只能使用与之配对的私钥解密;反之亦然 
 5     功能: 
 6         数字签名:主要在于让接收方确认发送方身份 
 7         对称密钥交换:发送方用对方的公钥加密一个对称密钥后发送给对方 
 8         数据加密:适合加密较小数据 
 9     缺点:密钥长,加密解密效率低下 
10     算法: 
11         rsa(加密,数字签名) 
12         dsa(数字签名) 
13         elgamal 

单向散列(hash算法)

 1     将任意数据缩小成固定大小的“指纹” 
 2         任意长度输入 
 3         固定长度输出 
 4         若修改数据,指纹也会改变(“不会产生冲突”) 
 5         无法从指纹中重新生成数据(“单向”) 
 6     功能:数据完整性 
 7     常见算法 
 8         md5: 128bits、sha1: 160bits、sha224 、sha256、sha384、sha512 
 9     常用工具 
10         md5sum | sha1sum [ --check ] file 
11         openssl、gpg 
12         rpm -v 
13 hash(data)=digest 摘要,有时候也称为指纹  只要数据不同摘要必不同,得到摘要推不出原来的数据值
14 不论什么数据。不论数据的大小,只要用的算法相同,那么输出长度必定相同
15 只要数据不同,摘要完全不同,哪怕数据之间只相差一个空格字符都会产生巨大的变化也称雪崩效应
16 常用于对比数据,数据是否被修改过,数据相同,摘要必定相同
17 
18 文件完整性的两种实施方式
19     被安装的文件
20         md5单向hash
21         rpm -v package-name
22         例:修改文件内容查看hash
23             rpm -qf /etc/issue
24                 centos-release-7-6.1810.2.el7.centos.x86_64
25             rpm -v centos-release
26                 missing   c /etc/yum.repos.d/centos-base.repo
27                 missing   c /etc/yum.repos.d/centos-cr.repo
28             echo 1 >> /etc/issue
29             rpm -v centos-release
30                 ..5....t.  c /etc/issue    :5就表示md5,说明文件内容变了,t表示文件的时间变了
31                 missing   c /etc/yum.repos.d/centos-base.repo
32                 missing   c /etc/yum.repos.d/centos-cr.repo
33             然后将追加的1删掉。再次比较
34             rpm -v centos-release
35                 .......t.  c /etc/issue    :文件内容恢复。但是时间改变了
36                 missing   c /etc/yum.repos.d/centos-base.repo
37                 missing   c /etc/yum.repos.d/centos-cr.repo
38 
39     发行的软件包文件
40         gpg公钥签名
41         rpm --import /etc/pki/rpm-gpg/rpm-gpg-key-centos-7
42         rpm -k tree-1.6.0-10.el7.x86_64.rpm
43         
44         如果不导入公钥,系统提示没有公钥,不能检查,如果有问题提示not ok

ca和证书 

 1     pki: public key infrastructure 
 2         签证机构:ca(certificate authority) 
 3         注册机构:ra 
 4         证书吊销列表:crl 
 5         证书存取库: 
 6     x.509:定义了证书的结构以及认证协议标准 
 7         版本号        主体公钥 
 8         序列号        crl分发点 
 9         签名算法      扩展信息 
10         颁发者        发行者签名 
11         有效期限 
12         主体名称 

证书获取

 1     证书类型: 
 2         证书授权机构的证书 
 3         服务器 
 4         用户证书 
 5     获取证书两种方法: 
 6         使用证书授权机构 
 7             生成证书请求(csr) 
 8             将证书请求csr发送给ca 
 9             ca签名颁发证书 
10         自签名的证书 
11             自已签发自己的公钥 

安全协议 

 1     ssl:secure socket layer,tls: transport layer security (安全套接层)
 2         1995:ssl 2.0 netscape 
 3         1996:ssl 3.0 
 4         1999:tls 1.0 
 5         2006:tls 1.1 ietf(internet工程任务组) rfc 4346 
 6         2008:tls 1.2 当前使用 
 7         2015:tls 1.3 
 8         功能:机密性,认证,完整性,重放保护 
 9     两阶段协议,分为握手阶段和应用阶段 
10             握手阶段(协商阶段):客户端和服务器端认证对方身份(依赖于pki体系,利用数字
11         证书进行身份认证),并协商通信中使用的安全参数、密码套件以及主密钥。后续通信使
12         用的所有密钥都是通过mastersecret生成。 
13             应用阶段:在握手阶段完成后进入,在应用阶段通信双方使用握手阶段协商好的密
14         钥进行安全通信
 1 ssl/tls 
 2     handshake协议:包括协商安全参数和密码套件、服务器身份认证(客户端身
 3         份认证可选)、密钥交换 
 4     changecipherspec 协议:一条消息表明握手协议已经完成 
 5     alert 协议:对握手协议中一些异常的错误提醒,分为fatal和warning两个级别,
 6         fatal类型错误会直接中断ssl链接,而warning级别的错误ssl链接仍可继续,
 7         只是会给出错误警告 
 8     record 协议:包括对消息的分段、压缩、消息认证和完整性保护、加密等 
 9     https 协议:就是“http 协议”和“ssl/tls 协议”的组合。http over 
10         ssl”或“http over tls”,对http协议的文本数据进行加密处理后,成为二
11         进制形式传输 

openssl 

 1     openssl:开源项目 
 2         三个组件: 
 3             openssl:多用途的命令行工具,包openssl 
 4             libcrypto:加密算法库,包openssl-libs 
 5             libssl:加密模块应用库,实现了ssl及tls,包nss 
 6     openssl命令: 
 7         两种运行模式:交互模式和批处理模式 
 8         openssl version:程序版本号 
 9         标准命令、消息摘要命令、加密命令 
10             标准命令:enc, ca, req, ... 

openssl命令 

 1     对称加密: 
 2         工具:openssl enc, gpg 
 3         算法:3des, aes, blowfish, twofish 
 4     enc命令: 
 5         帮助:man enc 
 6         加密: 
 7         openssl enc -e -des3 -a -salt -in testfile -out testfile.cipher 
 8         解密: 
 9         openssl enc -d -des3 -a -salt –in testfile.cipher -out testfile 
10         openssl ? 
 1     单向加密: 
 2         工具:md5sum, sha1sum, sha224sum,sha256sum… 
 3         openssl dgst 
 4     dgst命令: 
 5         帮助:man dgst 
 6         openssl dgst -md5 [-hex默认] /path/somefile 
 7         openssl dgst -md5 testfile 
 8         md5sum /path/to/somefile 
 9     mac: message authentication code,单向加密的一种延伸应用,用于实现
10         网络通信中保证所传输数据的完整性机制 
11         cbc-mac 
12         hmac:使用md5或sha1算法 
 1     生成用户密码: 
 2         passwd命令: 
 3         帮助:man sslpasswd 
 4         openssl passwd -1 -salt salt(最多8位) 
 5         openssl passwd -1 –salt centos 
 6         –salt:打乱生成的hash值,正常使用md5生成的hash值只要数据相同
 7         hash值就相同添加–salt严之后就可以打乱hash值即使数据一样hash
 8         值也是不一样的
 9     生成随机数: 
10         帮助:man sslrand 
11         openssl rand -base64|-hex num 
12         num: 表示字节数,使用-hex,每个字符为十六进制,相当于4位二进制,出现的字符数为num*2 
 1     公钥加密: 
 2         算法:rsa, elgamal 
 3         工具:gpg, openssl rsautl(man rsautl) 
 4     数字签名: 
 5         算法:rsa, dsa, elgamal 
 6     密钥交换: 
 7         算法:dh 
 8         dsa:digital signature algorithm 
 9         dss:digital signature standard 
10         rsa: 
 1     生成密钥对儿:man genrsa 
 2     生成私钥 
 3         openssl genrsa -out /path/to/privatekey.file num_bits 
 4         (umask 077; openssl genrsa –out test.key –des 2048) 
 5         openssl rsa -in test.key –out test2.key 将加密key解密 
 6     从私钥中提取出公钥 
 7         openssl rsa -in privatekeyfile –pubout –out publickeyfile 
 8         openssl rsa –in test.key –pubout –out test.key.pub 
 9     随机数生成器:伪随机数字 
10         键盘和鼠标,块设备中断 
11         /dev/random:仅从熵池返回随机数;随机数用尽,阻塞 
12         /dev/urandom:从熵池返回随机数;随机数用尽,会利用软件生成伪随机数,非阻塞 

创建ca和申请证书

 1     openssl的配置文件:/etc/pki/tls/openssl.cnf
 2         配置文件中有对应的语句块,定义默认ca,也可以添加ca,ca的默认设置
 3     文件中关于ca的选项策略,搭建ca时需要指定的信息(国家,城市,公司等等)
 4         match:要求申请填写的信息和ca设置信息必须一致
 5         optional:可有可无,和ca设置信息可不一致
 6         supplied:必须填写这项申请信息
 7         将来客户端申请填写时要注意以上字段,需要填写一致,否则报错
 8     1、创建所需要的文件
 9         touch /etc/pki/ca/index.txt    :生成证书索引数据库文件
10         echo 01 > /etc/pki/ca/serial:指定第一个颁发证书的序列号
11     2、ca自签证书
12         生成私钥
13         cd /etc/pki/ca/    
14         (umask 066;openssl genrsa -out private/cakey.pem 2048)    :安全
15     3、生成自签名证书:
16         openssl req -new -x509 -key /etc/pki/ca/private/cakey.pem -days 3650 -out /etc/pki/ca/cacert.pem
17         回车后输入ca的信息,地区(两个字符,例cn),公司,ca的域名,邮箱(可选项)
18         选项说明:
19             -new:生成新证书签署请求
20             -x509:专用于ca生成自签证书
21             -key:生成请求时用到的私钥文件
22             -days n:证书的有效期限
23             -out /path/to/file:证书的保存路径
24 客户端创建私钥申请证书:
25     1、创建私钥
26         (umask 066;openssl genrsa -out http.key 1024)
27     2、利用私钥生成证书申请
28         openssl req -new -key /data/http.key -out /data/http.csr
29             回车后输入相关信息,默认国家,城市,和公司这三项必须填写一样。部门是自定义的,主机名也是自定以,输入将来你要作为域名的那个名字。
30     3、将生成的申请发送到ca服务器
31         scp http.csr 服务器ip:/tmp/
32 服务端ca签署证书,并将证书颁发给请求者
33     1、生成证书
34         openssl ca -in /tmp/http.csr -out /etc/pki/ca/certs/http.crt -days 365
35             回车后输入信息,默认要求国家,省,公司三项必须和ca一致
36     2、将证书版发给请求者客户端
37         scp /etc/pki/ca/certs/http.crt 客户端ip:/data/
38 至此证书申请完毕,使用证书是应用软件中实现,在软件例如httpd中添加此证书的路径就可以用了
39     
40 查看证书中的信息
41     openssl x509 -in /path/to/file.crt -noout -test|issuer|subject|serial|dates
42         例:openssl x509 -in /data/http.crt -noout -text
43     openssl ca -status serial    :查看指定编号的证书状态