[TOC]
openssl version # 版本号
# 标准命令
enc, ca, req, ...
# 对称加密
工具: openssl enc, gpg
算法: 3des, aes, blowfish, twofish
# enc命令:
# 实例: 加密/root/fstab
openssl enc -e -des3 -a -salt -in /root/fstab -out /root/fstab.ciphertxt
-e 加密
-d 解密
-des3 使用哪种算法, 此处为使用des3这种算法
-a 基于文本进行编码
-salt 自动加杂质
-in 需要加密的文件
-out 加密后输出的文件
# 实例: 解密对应文件
openssl enc -d -des3 -a -salt -in /root/fstab.ciphertxt -out /root/fstab
# 单向加密:
工具: md5sum, sha1sum, sha224sum, sha256sum, ..., openssl dgst (消息摘要)
openssl dgst -md5 -hex -out /PATH/TO/RESULT_FILE /PATH/TO/FILE
MAC: message authentication code, 单向加密的一种延伸应用,
用于实现保证网络通信中所传输数据的完整性
机制:
CBC-MAC
HMAC: 使用md5或sha1算法 (集群会使用)
# 生成用户密码:
openssl passwd -1 -salt 'SALT' # 回车后输入密码, 即可显示加密后的密码
-1 md5加密
-salt 指明杂质
# 生成随机数:
openssl rand [ -base64 | -hex ] [-out file] num
-base64 | -hex 指明编码格式
num 指明输出的位数(字节数), -hex时, 每个字符4位, 出现的字符数为num*2;
# 公钥加密
DSA: digital signature algorithm (数字签名算法, 功能薄弱)
RSA: 算法统称, 公司名 (一般使用RSA)
加密:
算法: RSA, ELGamal
工具: gpg, openssl rsautl, openssl dsa
数字签名:
算法: RSA, DSA, ELGamal
工具: openssl rsa, openssl dsa
密钥交换:
算法: dh
生成密钥对儿:
openssl genrsa [ -des | -des3 ] -out /PATH/TO/PRIVATEKEY.FILE NUM_BITS
-des | -des3 将密钥文件加密, 每次访问时需要输入密码
-out 指明生成的密钥文件路径
NUM_BITS 指明生成密钥的位数
# 先生成的是私钥文件, 公钥可从私钥中提取出来
openssl rsa -in /root/rsakey.private -pubout
-pubout 输出公钥信息
(umask 077; openssl genrsa -out rsa.pri 2048)
# bash shell的括号有特殊用法:
# 所有放在括号中的命令是在子shell中运行
# 子shell中设置的umask值对当前shell无影响
随机数生成器:
熵池: 位于内存空间
/dev/random: 仅从熵池返回随机数, 随机数用尽会阻塞
/dev/urandom: 从熵池返回随机数, 随机数用尽, 会利用软件生成伪随机数, 不会阻塞
三个组件
-
openssl 多用途的命令行工具
-
libcrypt 加密解密库
-
libssl ssl协议的实现
PKI
public key infrastructure (公钥基础设施)
- CA 发证机构
- RA 注册机构
- CRL 吊销列表
- 证书存取库
建立私有CA
两种方式:
- openCA (是openssl的二次封装)
- openssl
证书申请及签署步骤
- 1.生成申请请求
- 2.RA核验
- 3.CA签署
- 4.获取证书
创建私有CA
/etc/pki/tls/openssl.cnf
作为CA时经常用到的默认配置文件, 内部的设置要与存放的相关内容一致
0. 配置好各个文件的存放路径
[CA_default]
dir = /etc/pki/CA # CA真正的工作目录
certs = $dir/certs # 已签发的证书存放位置
crl_dir = $dir/crl # 放被吊销后的证书
database = $dir/index.txt # 证书目录
certificate = $dir/cacert.pem # CA自己的证书
serial = $dir/serial # 新发证书的序列号
crlnumber = # 吊销证书的序列号
crl = # 当前正在使用的crl文件
private_key = # CA自己的私钥
RANDFILE =
default_days = 365 # 证书的有效期
default_crl_days = 30 # 吊销列表的有效期
default_md = default
preserve =
(1) 创建所需文件
cd /etc/pki/CA
touch index.txt
echo 01 > serial
(2) CA自签证书
# (1) 先创建CA自己的私钥
(umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
# (2) 再根据私钥创建公钥
openssl req -key /etc/pki/CA/private/cakey.pem -new -x509 \
-days 7300 -out /etc/pki/CA/cacert.pem
# -key 生成请求时用到的私钥文件
# -new 生成新证书签署请求
# -x509 专用于CA生成自签证书
# -days N 证书的有效期限
# -out 证书的保存路径
(3) 发证
# (3.1) 用到证书的主机生成证书请求
(umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)
openssl req -key /etc/httpd/ssl/httpd.key -new -days 365 \
-out /etc/httpd/ssl/httpd.csr
# (3.2) 把请求文件传输给CA
scp /etc/httpd/ssl/httpd.csr root@192.168.235.140:/tmp
# (3.3) CA验证证书, 并将签署后的证书还给请求者
openssl ca -in /tmp/httpd.csr -out /tmp/httpd.crt -days 365
scp /tmp/httpd.crt root@192.168.235.130:/tmp
# 查看证书中的信息
openssl x509 -in /PATH/FROM/CERT_FILE -noout -text|-subject|-serial
https_服务器证书.png
(4) 吊销证书
# (4.1) 客户端获取要吊销的证书的serial
opessl x509 -in /PATH/FROM/CERT_FILE -noout -serial -subject
# (4.2) CA
# 先根据客户提交的serial和subject信息, 对比检验是否与index.txt文件中的信息一致
# 吊销证书:
openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem
# (4.3) 生成吊销证书的编号(仅第一次吊销一个证书时执行)
echo 01 > /etc/pki/crlnumber
# (4.4) 更新证书吊销列表
openssl ca -gencrl -out thisca.crl
# 查看crl文件:
openssl crl -in /PATH/FROM/CRL_FILE.crl -noout -text
网友评论