Linux 第32天 openssl 私有CA
时间: 20180821
目录
OpenSSL
常见的加密算法和协议
一次加密通信过程
数字证书
Openssl命令
使用Openssl构建私有CA
OpenSSL
SSL (Secure Socket Layer)安全的套接字协议,主要用于传输数据的加密。
OpenSSL是SSL协议开源形式,是广泛使用的商业及SSL工具。
OpenSSL也是一种命令行工具。
常见的加密算法和协议
1 对称加密 加密和解密使用同一个密钥,依赖于算法和密钥,但其安全性依赖于密钥而非算法
常见的算法
DES: Data Encryption Standard, 56bits
3DES
AES Advanced Encryption Standard(128bit,192,256,384,512bits)
Blowfish
Twofish
IDEA
RC6
CAST5
特性 加密、解密使用同一密钥
将明文分隔成固定大小的块,逐个进行加密
2 非对称加密 采用的是公钥加密方法,当然还需要另一个密钥来解密,这个密钥称之为私钥
两者统称为密钥对儿
私钥: Secret Key 仅允许个人使用
公钥: Public Key 公开给所有人获取
公钥是从私钥中提取而来,使用公钥加密的数据,
只能使用与此公钥配对的私钥解密,反之亦然。
用处: 身份认证,密钥交换,数据加密
算法: RSA DSA ELGamal
特性: 密钥长度较大,例如512bits,2048bits,4096bits
加密解密分别使用密钥对儿中的密钥相对进行
常用于数据签名和密钥交换
3 单向加密 只能加密,不能解密,主要是提出数据的特征码
特性:定长输出,不论原来的数据是多大级别,其加密结果长度一样
雪崩效应,原始数据微小改变,将会导致结果巨大变化
不可逆
算法:
MD5 128bits定长输出
SHA1 160bits定长输出
SHA256
SHA512
SHA384
SHA512
CRC32
用处: 数据完整性校验,系统账号密码校验
4 密钥交换 IKE (Internet Key Exchange)
双方通过交换密钥来实现数据加密解密
一次加密通信过程
发送者
1 使用单向加密算法生成数据的特征码(数据完整性验证)
2 使用自己私钥加密特征码,附加在数据后面(身份验证)
3 生成用于对称加密的临时密钥
4 用此临时密钥加密数据和已经使用私钥加密后的特征码
5 使用接收方的公钥加密此临时密钥,附加在对称加密后的数据后方(数据传输保密性)
接收者
1 使用自己的私钥解密加密的临时密钥,从而获得对称密钥
2 使用对称密钥解密对称加密的数据和私钥加密的特征码密文;
从而获得数据和特征码密文
3 使用发送方的公钥解密特征码密文,从而获得从计算生成的特征码
4 使用与对方同样的单向加密算法计算数据的特征码,并与解密而来的进行比较
数字证书
双方通讯过程中,数据的加密解密依赖于对方的公钥,因此就需要一种可靠机制能够保证
公钥数据的安全性,即如何来确认此公钥就是你所要通信主机的公钥。这就是CA,CA是一
个证书颁发机构,当双方要建立通信时,都需要找一个大家都认同的CA机构申请证书,当
双方都申请证书后,要通信时则在通信之前互相交换自己的证书,然后把证书拿CA机构的
公钥解密如果可以解密则表示确实是要通信的主机
CA只是PKI(Public Key Infrastructure公钥基础设施)的一个组成部分
PIK包含
CA 签证机构 相当于办理×××时的公安局(真正颁发证件的机构)
RA 注册机构 相当于办理×××的派出所(帮你拍照信息录入的机构)
CRL 证书吊销列表 相当于我们证件丢失时挂失的内容
证书存取库 当别人去请求认证时的资料库
数字证书的格式(x.509 v3) 由以下几部分:
版本号version
序列号serial number CA用于唯一标识此证书
签名算法标志Signature algorithm identifier
发行者的名称 CA自己的名称
有效期 两个日期,起始日期和终止日期
证书主体名称: 证书拥有者自己的名字
证书主体公钥信息: 证书拥有者自己的公钥
发行商的唯一标识
证书主体的唯一标识
扩展信息
签名: CA对此证书的数字签名
Openssl命令
openssl是ssl的一个开源项目,由三部分组成
openssl 多用途命令行工具,每种功能都使用专用的子命令来实现
libcrypto 加密、解密库文件
libssl ssl协议实现
openssl命令
子命令分类: 标准命令、消息摘要命令、加密解密相关命令
加密文件(对称加密)
算法: des, 3des, aes, blowfish, idea, cast5
工具: openssl enc, gpg
enc工具:
openssl enc -e -CIPHERNAME -in /PATH/FILE -out /PATH/enc_FILENAME
openssl enc -d -CIPHERNAME -in /path/cipherfile -out /path/file
上述两种是一个加密文件一个解密文件
单向加密(提取数据的特征码)
算法: md5 sha1
工具: openssl dgst, md5sum, sha{1,224,256,384,512}sum
openssl dgest filename
如 openssl sha1 abc.txt
MAC 消息认证码,单向加密的一种延伸应用,用于实现在网络通信中保证
所传输数据的完整性
生成用户密码
openssl passwd -l -salt 8bits 随机数
生成随机数
openssl rand <-hex|-base64> NUM
公钥加密
工具: gpg, openssl rsautl
数字签名: RSA, DSA, ELGanmal
DSA: Digital Signature Algorithm
DSS: Digital Signature Standard
密钥交换:
公钥加密,DH
生成密钥对
操作过程: 生成私钥,从私钥中提取公钥
openssl genrsa -out /path/rsa_key_file
(umask 077;openssl genrsa -out /root/mykey.key)
从私钥中提取公钥
openssl rsa -in /root/mykey.key -pubout > mykys.pubkey
随机数生成器 random 和 urandom
首先说一说熵池的概念,在操作系统上有一个叫做熵池的地方,他是用来保存
中断产生的随机数(每一次硬件中断都会产生一个随机数)
/dev/random 仅从熵池中返回随机数,当熵池中的随机数耗尽时,取随机数的
进程将会被阻塞
/dev/urandom 先从熵池中取随机数,当熵池中的随机数耗尽时,
就通过伪随机数生成器 生成随机数
使用Openssl构建私有CA
1. 生成私钥
2. 生成自签署证书
私钥: 用于签发证书时,向证书添加数字签名使用
证书: 每个通信方都导入此证书"受信任的证书颁发机构"
涉及的配置文件 /etc/pki/tls/openssl.cnf
工作目录 /etc/pki/CA
建立私有CA
生成私钥文件 /etc/pki/CA/private/cakey.pem
#(umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
生成自签证书
# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem
-out /etc/pki/CA/cacert.pem -days 365 (与上边是一条命令)
其中
-new 生成新的证书签署请求
-key 私钥文件路径,用于提取公钥
-days N 证书有效时长,单位为天
-out 输出文件保存位置
-x509 直接输出自签署的证书文件,通常只有构建CA时用到
提供辅助文件
touch /etc/pki/CA/index.txt
echo 01 /etc/pki/CA/serial
查看自签证书
openssl x509 -text in cacert.pem
给节点颁发证书
1 节点申请证书(注意这个一般已经是另外一台机器了哈)
在证书申请的主机上进行如下步骤
生成私钥
mkdir -p /etc/http/ssl
cd /etc/http/ssl
(umask 077; openssl genrsa -out httpd.key 1024)
生成证书签署请求
openssl req -new -key httpd.key -out httpd.csr
csr(Certificate Signing Request)
注意:
其中的subject信息部分,要与CA保持一致
Common Name要使用此主机在通信时真实的名字
把请求发送给CA
如果是现实场景一般是将此请求带到CA机构那边去
2 CA证书签发(此时来到CA的机器上)
验证(查看)请求者信息
openssl x509 -text -in /root/httpd.csr
签署证书
openssl ca -in /root/httpd.csr -out /root/http.crt -days 365
crt (CeRTificate)
把签署好的证书还给请求者
吊销证书
1 获取吊销证书的序列号
openssl x509 -in /root/http.crt -noout -serial -subject
2 实现证书吊销
吊销证书
openssl ca -revoke /root/http.crt
生成吊销证书的编号
echo 01 > /etc/pki/CA/crlnumber
更新证书吊销列表(名字和路径自行定义)
openssl ca -gencrl -out /etc/pki/CA/crl/dev.crl
crl (Certificate Revocation List)
查看被吊销的证书
openssl crl -text -in /etc/pki/CA/crl/dev.crl