openssl
Table of Contents
PKI: Pubile key Infrastucture 公钥基础设施
openssl 的三大功能:
libcrypto 通用功能的加密库
libssl 用于实现 TLX/SSL 的功能
openssl 多功能命令工具, 生成密钥,创建数字证书,手动加密解密数据
对称加密
工具 gpg openssl enc
加密 openssl enc -des3 -a -salt -in /ets/fstab -out /tmp/fstab.cipher
解密 openssl enc -d -dec3 -a -salt -in /tmp/fstab.cipher -out 文件
DES(56bits) 数据加密标准
3DES
AES(128bits) 高级加密标准
Blowfish
Twofish
IDEA
RC6
CAST5
Serpent
单向加密
特性 One-Way (Collision-free)
算法
md5 128bits
sha1 160bits
sha512 512bits
MD5, sha1 是对数据进行计算特征码
工具 sha1sum, md5sum, openssl dgst
openssl dgst [-md5|-md4|-md2|-sha1|-sha|-mdc2|-ripemd160|-dss1][-out filename] /path/to/somefile
MAC: 信息摘要码,单向加密的延伸应用
应用 用于实现在网络通信中保证所传输的数据完整性
机制
CBC-MAC
HMAC: 使用 md5 和 sha1 算法
用户认证
工具: passwd openssl passwd
密钥对
公钥: pkey, 用来加密
私钥: skey, 用来解密
算法 RSA,EIGamal
工具 gpg, openssl rsautl 用于加密, 一般不用密钥来进行加密
数字签名: 私钥加密,公钥解密
算法 RSA,EIGamal,DSA
DSA: Digital Signature Algorithm (签名)
DSS: Digital Signature standard (签名)
密钥交换 IKE
算法 DH(Diffie-Hellman),公钥加密
数字证书
第三方机构使用一种安全的方式把公钥分发出去
证书格式 x509
公钥和有效期限 持有者的个人合法身份信息: 主机名 证书的使用方式 CA 的信息 CA 的数字签名
用户
- 生成一对密钥
- 把所需信息和公钥按固定格式制作成证书申请
CA 机构
- 自签证书 (让自己变成第三方机构, 签证)
- 签署证书 (给 server 端生成证书, server 端把 public key 给第三方机构)
- 传给用户 (发送 server 端的证书给 client 端)
- 维护吊销列表 (取消证书)
OpenCA: 更专业的 CA 工具
openssl 实现私有 CA, 让自己成为 CA
openssl 中有如下后缀名的文件
.key 格式 私有的密钥 .crt 格式 证书文件,certificate 的缩写 .csr 格式 证书签名请求(证书请求文件),含有公钥信息,certificate signing request 的缩写 .crl 格式 证书吊销列表,Certificate Revocation List 的缩写 .pem 格式 用于导出,导入证书时候的证书的格式,有证书开头,结尾的格式
配置文件 /etc/pki/tls/openssl.cnf
- 生成密钥对 cakey.pem
? cd /etc/pki/CA ? (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
cakey.pem
是在/etc/pki/tls/openssl.cnf
中定义的
- 如果想查看公钥, 不是必要的, 仅仅是用来查看
? openssl rsa -in private/cakey.pem -pubout -text -noout ? openssl rsa -in private/cakey.pem -pubout -text
- 生成自签证书 cacert.pem
? openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3655
- 创建需要的文件
? touch /etc/pki/CA/{index.txt,serial,crlnumber} # 颁发过的列表 序列号 吊销序列号 ? echo 01 > /etc/pki/CA/serial
至此, 我们已经伪装成为 CA, 现在可以向我们伪装的 CA 申请证书
用 openssl 实现证书申请
在主机上生成密钥,保存至应用此证书的服务的配置文件目录下, 例如
- 生成密钥对
? mkdir /etc/httpd/ssl ? cd /etc/httpd/ssl ? (umask 077; openssl genrsa -out httpd.key 1024)
- 生成证书签署请求
? openssl req -new -key httpd.key -out httpd.csr
- 将请求文件发往 CA (伪装的 CA)
scp … …
- CA 签署证书
? openssl ca -in /path/to/httpd.csr -out /path/to/httpd.crt -days DAYS
- 将证书传回请求者
- 吊销证书 (私钥丢了, 需要重新换等情况才需要)
? openssl ca -revoke /path/to/somefile.crt