CA和证书
PKI:Public Key Infrastructure 公共密钥加密体系
- 签证机构:CA(Certificate Authority)
- 注册机构:RA
- 证书吊销列表:CRL
- 证书存取库:
X.509:定义了证书的结构以及认证协议标准
- 版本号
- 序列号
- 签名算法
- 颁发者
- 有效期限
- 主体名称
证书类型:
- 证书授权机构的证书
- 服务器证书
- 用户证书
获取证书两种方法:
- 自签名的证书: 自已签发自己的公钥
- 使用证书授权机构:
- 生成证书请求(csr)
- 将证书请求csr发送给CA
- CA签名颁发证书
TLS 介绍
SSL:Secure Socket Layer,TLS: Transport Layer Security
1995:SSL 2.0 Netscape 开发
1996:SSL 3.0
1999:TLS 1.0
2006:TLS 1.1 IETF(Internet工程任务组) RFC 4346
2008:TLS 1.2 当前主要使用
2015:TLS 1.3
功能:
机密性
认证
完整性
重放保护
SSL/TLS组成
- Handshake协议:包括协商安全参数和密码套件、服务器身份认证(客户端身份认证可选)、密钥交换
- ChangeCipherSpec 协议:一条消息表明握手协议已经完成
- Alert 协议:对握手协议中一些异常的错误提醒,分为fatal和warning两个级别,fatal类型错误会直接中断SSL链接,而warning级别的错误SSL链接仍可继续,只是会给出错误警告
- Record 协议:包括对消息的分段、压缩、消息认证和完整性保护、加密等
TLS实现过程
实现分为握手阶段和应用阶段
- 握手阶段(协商阶段):客户端和服务器端认证对方身份(依赖于PKI体系,利用数字证书进行身份认证),并协商通信中使用的安全参数、密码套件以及主密钥。后续通信使用的所有密钥都是通过MasterSecret生成
- 应用阶段:在握手阶段完成后进入,在应用阶段通信双方使用握手阶段协商好的密钥进行安全通信
目前密钥交换 + 签名有三种主流选择
- RSA 密钥交换、RSA 数字签名
- ECDHE 密钥交换、RSA 数字签名
- ECDHE 密钥交换、ECDSA 数字签名
HTTPS
HTTPS 协议:就是“HTTP 协议”和“SSL/TLS 协议”的组合。HTTP over SSL”或“HTTP over TLS”,对http协议的文本数据进行加密处理后,成为二进制形式传输
- 客户端发起HTTPS请求
用户在浏览器里输入一个https网址,然后连接到服务器的443端口。 - 服务端的配置
采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是
自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹
出提示页面。这套证书其实就是一对公钥和私钥。 - 传送服务器的证书给客户端
证书里其实就是公钥,并且还包含了很多信息,如证书的颁发机构,过期时间等等。 - 客户端解析验证服务器证书
这部分工作是有客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等
等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一
个随机值。然后用证书中公钥对该随机值进行非对称加密。 - 客户端将加密信息传送服务器
这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端
的通信就可以通过这个随机值来进行加密解密了。 - 服务端解密信息
服务端将客户端发送过来的加密信息用服务器私钥解密后,得到了客户端传过来的随机值 - 服务器加密信息并发送信息
服务器将数据利用随机值进行对称加密,再发送给客户端 - 客户端接收并解密信息
客户端用之前生成的随机值解密服务段传过来的数据,于是获取了解密后的内容。
openssl命令
两种运行模式:
交互模式
批处理模式
三种子命令:
标准命令
消息摘要命令
加密命令
[root@centos8 ~]#openssl version
OpenSSL 1.1.1 FIPS 11 Sep 2018
[root@centos8 ~]#openssl
OpenSSL> help
Standard commands
asn1parse ca ciphers cms
crl crl2pkcs7 dgst dhparam
......
OpenSSL> ca --help
Usage: ca [options]
Valid options are:
-help Display this summary
-verbose Verbose output during processing
-config val A config file
......
OpenSSL>q
openssl命令对称加密:
工具:openssl enc, gpg
算法:3des, aes, blowfish, twofish
enc命令:帮助:man enc #对称加密
[root@centos7|~]#cp /etc/fstab .
[root@centos7|~]#ls
2.sh fstab 公共 视频 文档 音乐
anaconda-ks.cfg initial-setup-ks.cfg 模板 图片 下载 桌面
#加密
[root@centos7|~]#openssl enc -e -des3 -a -salt -in fstab -out fstab.cipher
enter des-ede3-cbc encryption password:
Verifying - enter des-ede3-cbc encryption password:
[root@centos7|~]#ls
2.sh fstab initial-setup-ks.cfg 模板 图片 下载 桌面
anaconda-ks.cfg fstab.cipher 公共 视频 文档 音乐
[root@centos7|~]#cat fstab.cipher
U2FsdGVkX1+rUiNa6ZVGRdNyQzcIY+F72pwOq3iXqYFmEKpJiNPENQUyj7X2DvDy
nQT5MZhF3IKC4TkXp91OdhBIBHtiRn+M4qp2WWQcg1f/ThF5TeOOMDMaAab/3FCO
OAiQ1H4X5hnQP0nn+YUZyDmI+oW57Et9U31MJs5EE4tYoiTB3zlNBeeYUen2i4DM
iZxiCKBC+fAq0NXWWFlL9mc7u
#解密:
[root@centos7|~]#openssl enc -d -des3 -a -salt –in fstab.cipher -out fstab2
openssl命令单向加密
工具:openssl dgst 摘要,实现各种哈希算法
算法:md5sum, sha1sum, sha224sum,sha256sum…
dgst命令:帮助:man dgst
[root@centos7|~]#openssl dgst -md5 fstab
MD5(fstab)= 00724aa3987a2a0c7afb6f79dbaa2655
[root@centos7|~]#openssl dgst --sha512 fstab
openssl命令生成用户密码
passwd命令:帮助:man sslpasswd
[root@Centos8|13|~]#openssl passwd -6
Password:
Verifying - Password:
$6$bBWPPgoJtrl0ITPM$I5vQ9av3R0aLsJwf.3ACKCrQtB4mez5CirVfRob2BSdnOMxfWoUGleXUvMCrbg4VIlHzVDRdmLSfC7COHKjUn1
bBWPPgoJtrl0ITPM 盐
[root@Centos8|14|~]#openssl passwd -6 -salt "centos"
[root@Centos8|14|~]#getent shadow lin
lin:$6$a72OU1Cubg6Y6Xy7$pL4LfPkxmbASRs7boWmWwUrHEPnnZAmr9yP9D4rWaqEJVLc/U0JzC64gAtDkawaDF.YSN7E9TI/.KQIfqkkTN.'
[root@Centos8|16|~]#useradd -p '$6$a72OU1Cubg6Y6Xy7$pL4LfPkxmbASRs7boWmWwUrHEPnnZAmr9yP9D4rWaqEJVLc/U0JzC64gAtDkawaDF.YSN7E9TI/.KQIfqkkTN.' li
生成的li用户和lin密码相同
openssl命令生成随机数:
随机数生成器:伪随机数字,利用键盘和鼠标,块设备中断生成随机数
/dev/random:仅从熵池返回随机数;随机数用尽,阻塞
/dev/urandom:从熵池返回随机数;随机数用尽,会利用软件生成伪随机数,非阻塞
帮助:man sslrand
openssl rand -base64|-hex NUM
NUM: 表示字节数,使用-hex,每个字符为十六进制,相当于4位二进制,出现的字符数为NUM*2
[root@Centos8|19|~]#openssl rand -base64 3
WIIl
[root@Centos8|20|~]#openssl rand -base64 3
GbqR
[root@Centos8|21|~]#openssl rand -base64 3
x/6N
[root@Centos8|22|~]#openssl rand -base64 3
gxkA
生成随机口令:
方法一
[root@Centos8|51|~