加密方式:
对称加密、公钥加密、单向加密
对称加密:
加密算法+口令+文明数据 --> 密文 --> 使用同一个口令->明文 (ps 严重依赖口令 算法可能是公开的)
破解方法:字典攻击 枚举猜测 (拒绝简单密码)(1秒可1e次,不算快 假如20位密码 键盘100个 100^20/10^8=10^32 秒)
对称加密原理:将原文按照固定大小切换block 逐块加密 将第一块加密结果与第二块加密结果异或运算结果作为第二块结果输出(块链)
对称加密算法:
DES(56bits)容易破解 -> 3DES 3轮DES
AES(128bits) 用的比较多
Blowfish,Twofish, IDEA(付费), RC6, CAST5, Serpent
对称加密缺陷:密钥交换(口令),用户认真,数据完整性
工具:gpg, openssl enc
对称加密:
[[email protected] ~]# openssl enc -des3 -a -salt -in a.html -out a.html.cipher
对称解密:
[[email protected] ~]# openssl enc -d -des3 -a -salt -in a.html.cipher -out a.html.new
密钥交换:DH算法 如图:
非对称加密
公钥加密(发送给别人) 私钥解密
公钥加密比对称加密速度上慢3个级别(一个级别10倍)所以一般不用来加密数据
公钥加密算法:RSA, EIGamal, DSA
实现:
密钥交换 (用过公钥加密)
身份认真
工具:gpg, openssl rsautl
单向加密
保证数据完整性
抽取数据特征码算法:MD5, SHA1, SHA512, CRC-32
单向加密特效:雪崩效应 定长输出
#消息认证:某种机制加密特征码 无法修改 只认真消息本事靠谱
#消息认证算法:MAC (Message Authentication Codes)
# CBC-MAC
# HMAC:
工具:sha1sum, md5sum, cksum, openssl dgst
加密:
[[email protected] ~]# openssl dgst -sha1 a.html SHA1(a.html)= a87b6990046b707e1b71c5c872f4debf2ee37b79 [[email protected] ~]# sha1sum a.html a87b6990046b707e1b71c5c872f4debf2ee37b79 a.html
数据交换需要实现:私密性,完整性,身份认证
数字证书:
证书格式:x509、pkcs
x509格式:
公钥和有效期限;
持有者的个人合法身份信息;(主机名)
证书的使用方式;(用来干嘛)
CA的信息;(颁发机构信息)
CA的数字签名;(把前4项加密)
证书申请条件:
生成一对密钥
把所需信息和公钥按照固定格式制成证书申请
CA需要条件:
自签证书(需要密钥对)
签署证书
证书吊销
证书有效期
标准工具openCA 自己实验用openssl
用openssl实现私有CA :
配置文件:/etc/pki/tls/openssl.cnf
[ CA_default ] dir = /etc/pki/CA #工作目录 certs = $dir/certs #发布证书位置 crl_dir = $dir/crl #吊销列表 database = $dir/index.txt #索引文件数据库 new_certs_dir = $dir/newcerts # 刚签署证书位置 certificate = $dir/cacert.pem # CA 自己证书 serial = $dir/serial # 当前发出去证书编号 crlnumber = $dir/crlnumber #吊销证书编号 crl = $dir/crl.pem # 当前正在使用的CRL 证书吊销列表文件 private_key = $dir/private/cakey.pem # ca私钥(400) RANDFILE = $dir/private/.rand # 随机数种子 x509_extensions = usr_cert # x509扩展 用户证书
ca自签
[[email protected] CA]# cd /etc/pki/CA [[email protected] CA]# (umask 077; openssl genrsa -out private/cakey.pem 2048) #用子shell生成2048位的ca私钥 [[email protected] CA]# openssl rsa -in private/cakey.pem -pubout -text #查看 从私钥提取公钥输出 [[email protected] CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 800 # 默认一年 [ req_distinguished_name ] countryName_default = XX #默认国家2字 stateOrProvinceName_default = Default Province #省或州 localityName_default = Default City #默认城市 0.organizationName_default = Default Company Ltd #公司名 #organizationalUnitName_default = #部门 commonName = Common Name (eg, your name or your server\‘s hostname) #很重要host emailAddress = Email Address #邮件
[email protected] CA]# touch index.txt serial crlnumber #索引文件数据库 当前发出去证书编号 吊销证书编号 [[email protected] CA]# echo 01 >serial
req: 生成证书签署请求 -news: 新请求 -key /path/to/keyfile: 指定私钥文件 -out /path/to/somefile: 指定生成证书位置 -x509: 生成自签署证书 -days n: 有效天数 有默认值一年
CA完毕
客户端:
(以httpd为例)
[[email protected] httpd]# mkdir /etc/httpd/ssl [[email protected] httpd]# cd /etc/httpd/ssl [[email protected] ssl]# (umask 077; openssl genrsa -out httpd.key 2048) #生成私钥 [[email protected] ssl]# openssl req -new -key httpd.key -out httpd.csr #证书签署请求 自动提取公钥 A challenge password []: #证书请求需要加密存放,如果添加密码,需要将密码一同给CA (这里为空) 私有CA,SERVICE证书上的信息应该和节点信息是一样的,如果不一样,验证就不会通过。 [[email protected] ssl]# scp httpd.csr [email protected]:/tmp/
SERVICE验证:
[[email protected] CA]# openssl ca -in /tmp/httpd.csr -out /tmp/httpd.crt -days 800 #验证通过 [[email protected] CA]# scp /tmp/httpd.crt 172.16.178.138:/etc/httpd/ssl/ #发给客户端
吊销证书:
[[email protected] CA]# openssl x509 -in /tmp/httpd.crt -noout -serial -subject #查看序列号 serial=01 subject= /C=CN/ST=ZHEJIANG/O=BAIDU/OU=LINUX/CN=marco.com/[email protected] [[email protected] CA]# cat index.txt V 180714022051Z 01 unknown /C=CN/ST=ZHEJIANG/O=BAIDU/OU=LINUX/CN=marco.com/[email protected] 查看是否一致 [[email protected] CA]# openssl ca -revoke /etc/pki/CA/newcerts/01.pem #吊销证书 [[email protected] CA]# echo 01 > crlnumber #如果是第一次吊销 [[email protected] CA]# openssl ca -gencrl -out crl/httpd.crl #更新证书吊销列表
完毕