SSL又被称之为安全的套接字层(Secure Socket Layer),一种安全的加密协议,是嵌套在应用层与传输层之间的一个半层。用户在浏览器中需要加密的时候输入https,则数据通过该半层进行加密。不需要加密的时候则输入http,数据不经过该半层。
TLS又被称之为传输层安全协议(Transport Layer Security),其前身是SSL。IETF(互联网工程任务小组)将SSL标准化,进行改进,在加密过程中使用了更加强大复杂的算法,修复了SSL的很多漏洞,并命名为TLS。
OpenSSL是基于SSL/TLS加密协议的一种开源实现,实现了基本的加密功能。
OpenSSL由三个组件组成:
openssl的子命令有很多,这里简要的说明一下openssl的用法
对称加密:
# openssl enc -e -des3 -a -salt -in ipset.sh -out ipset
enc:表示加密
-e:加密算法
-des3:des3加密算法
-a:基于文本进行编码
-salt:加盐
-in:加密的文件
-put:输出的文件
# openssl enc -d -des3 -a -salt -in ipest -out ipset.sh
-d:表示解密
使用openssl –help查看加密算法
单向加密:
使用单向加密用来加密文件的特征码,加密算法有:
md5sum, sha1sum, sha224sum, sha256sum, sha512sum, openssl dgst
# openssl dgst -md5 ipset
-md5:表示使用md5算法进行加密
使用openssl给密码加密:
# openssl passwd -1 -salt 123456
-1:表示使用md5进行加密
-salt 123456:表示加盐,如果改变盐的值则会对加过造成巨大改变
生成随机数:
# openssl rand -hex 8
# openssl rand -base64 8
生成密钥对
# (umask 077; openssl genrsa -out key.pri 2048)
umask 077:由于密钥只能自己看见,所以在生成之后的权限只能是600
genrsa:生成密钥的算法
2048:密钥的位数
# openssl rsa -in key.pri -putout > key.pub
上述命令生成的仅仅只是私钥,而公钥是从私钥中提取出来的,所以要手动使用命令提取公钥
建立私有CA
证书申请及签署步骤:
OpenSSL配置文件在/etc/pki/tls/openssl.cnf文件中,其配置文件最主要的就是CA的一些配置
default_ca = CA_default:默认CA配置选项就是CA_default
dir = /etc/pki/CA CA数据存储目录
certs = $dir/certs 签发过的证书存储目录
crl_dir = $dir/crl 证书吊销列表放置路径
database = $dir/index.txt 证书的索引文件,这里存储的是签发的证书的索引
unique_subject = no 证书的主体信息是否唯一
new_certs_dir = $dir/newcerts 刚刚签署完成的证书放在哪里
certificate = $dir/cacert.pem CA自己的证书放在哪里
serial = $dir/serial 证书序列号
crlnumber = $dir/crlnumber 被吊销的证书序列号
crl = $dir/crl.pem 被吊销的证书
private_key = $dir/private/cakey.pem CA自己的私钥放置位置
自签证书步骤:
(1) 创建所需要的文件
在/etc/pki/CA这个目录下,也就是CA的数据存放目录,只有四个目录certs、crl、newcerts、private,而在OpenSSL的配置文件中定义的一些文件在这个目录中没有,如存放签发证书索引的database文件、存放证书序列号的serial文件。这时,我们需要手动创建这些文件:
# cd /etc/pki/CA
# touch index.txt 创建数据文件
# echo 01 > serial 创建签发证书的序列号文件
(2) 生成证书
# (umask 077; openssl genrsa -out private/cakey.pem 2048)
在/etc/pki/CA/private目录下生成私钥文件cakey.pem
# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 7300 -out /etc/pki/CA/cacert.pem
-new: 生成新证书签署请求
-x509:专用于CA生成自签证书
-key:生成请求时用到的私钥文件
-days:证书的有效期限
-out:证书的保存路径
例如:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN //只能是两个单词
State or Province Name (full name) []:Hubei //省份
Locality Name (eg, city) [Default City]:Hubei //省份
Organization Name (eg, company) [Default Company Ltd]:xx //公司
Organizational Unit Name (eg, section) []:Ops //部门
Common Name (eg, your name or your server's hostname) []:xx //这个至关重要,必须与你的DNS服务器解析出来的主机名一致
Email Address []:xx //邮箱
生成完成证书之后客户端要请求发证:
(1) 客户端在本地生成证书,与服务器端相似,这里不作过多描述
# (umask 077; openssl genrsa -out /root/httpd.key 2048)
# openssl req -new -key /root/httpd.key -days 365 -out /root/httpd.csr
注意:
1、在填写资料的时候,客户端的国家以及省份要与服务器端一致。
2、生成的公钥后缀也要发生改变
3、在向服务器端申请的时候不要加上-x509选项
(2) 使用scp命令将生成的公钥传递给服务器端
(3) 签署请求
# openssl ca -in /root/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365
证书的后缀为.crt
(4) 将签署完成的证书发送至客户端
一次完整的建立私有CA与签署请求的过程完成,要想查看签署的证书的详细信息使用以下命令:
# openssl x509 -in /PATH/FROM/CERT_FILE -noout -text
-in /PATH:指明签署的证书存放路径
-text:文本格式输出
(5) 吊销证书
(a) 客户端获取要吊销的证书的serial
# openssl x509 -in /path/from/cert_file -noout -serial -subject
(b) 先根据客户提交的serial与subject信息,对比检验是否与index.txt文件中的信息一致
吊销证书:
# openssl ca -revoke /etc/pki/CA/newcerts/SERTAL.pem
(c) 生成吊销证书的编号(第一次吊销证书的时候才会使用到该命令)
# echo 01 > /etc/pki/CA/crlnumber
(d) 更新证书吊销列表
# openssl ca -gencrl -out thisca.crl
查看crl文件:
# openssl crl -in /path/from/crl_file.crl -noout -text
–end–