SSL简介:
SSL是Secure Socket Layer(安全套接字层)的简写,显而易见,它是为了数据传输安全而发明的一种安全协议,并且是在传输层进行网络加密的一种协议。
信息安全的目标有:
保密性
完整性
可用性
为实现这三个目标的手段有:
技术层面:加密解密
服务层面:用于抵制攻击的服务。
加密解密技术:
1.对称加密:将数据分隔成固定大小的块来分别加密,并且加密和解密使用同一个秘钥的加密技术。
用途:加密大数据文件
常用的对称加密算法有:
DES:Data Encryption Standard;即数据加密标准,但是已经被完全破解。
3DES:Triple DES;3倍的DES加密,即在每个块上应用三次DES加密
AES:Advanced Encryption Standard(高级加密标准); (128bits, 192bits, 256bits, 384bits),这种标准是为了取代DES加密技术而发明的。
还有:Blowfish Twofish IDEA RC6 CAST5等加密算法。
缺点:秘钥过多,分发困难,
2.非对称加密(公钥加密):即使用两个不同的秘钥(公钥和私钥)来加密和解密,其中公钥是从私钥中提取得来的,使用公钥加密的数据只能由私钥解密,使用私钥加密的数据能用公钥解密,因此私钥只能是个人所有,但是公钥可以所有人拥有。
私钥与公钥的用途:
(1)使用私钥加密的数据由于所有人都可以使用公钥来解密,因此并不是来保障安全的,而且为了“验明正身”,即来确保数据来源的可靠性,简单来说就是数字签名作用。
(2)使用私钥可以解密私人公钥加密的数据,由于私钥只有个人拥有,因此往往用在传输机密数据的地方,比如密码交换(加密对称加密秘钥,从而来实现秘钥交换的安全性)。
常用的非对称加密算法有:
RSA:RSA是由其三个作者的名字的三个首字母组成的,通过两个质数相称的结果来反推这两个质数是非常困难的这个原理发明的。
DSA:只用于数字签名与认证上,因此不能来加密数字,也不能来进行秘钥交换。
ELGamal:通过公钥加密体系和椭圆曲线加密发明。
3.单向加密:提取数据指纹信息,因此只能加密不能解密,但是这个加密不是加密数据的,而是将文件数据的指纹信息提取出来。且只能加密不能解密
单向加密用途:因为是提取数据的指纹信息,因此目的是为了确保文件的完整性
常用的单向加密算法有:
md5:Message Digest 5, 128bits:信息摘要第五版
sha家族:Secure Hash Algorithm (安全散列算法):有sha1(160bits),sha224,sha256
sha384,sha512。
4.秘钥交换:
分为公钥加密和HD(Deffie-Hellman)
总结:A向B传递数据时候
A:首先使用单向加密提取指纹秘钥,然后使用非对称加密的A的私钥实现数字签名,然后使用对称加密来加密整个数据,最后使用非对称加密中的B的公钥来加密对称加密的秘钥。
B:首先使用自己的私钥来解密自己的公钥,从而得到对称加密的秘钥,得到了得到了对称秘钥就可以解开数据内容了,如果不注重安全的话到了这一步其实就能看到数据内容了,但是最好使用A的公钥解密A的私钥,看看是否来源合法,然后再使用相同的算法提取数据指纹信息,来看看数据完整性是否遭到破坏。
PKI:Public Key Infrastructure即公钥基础设施
签证机构:CA
注册机构:RA
证书吊销列表:CRL
证书存取库:
X.509v3:定义了证书的结构以及认证协议标准
版本号
序列号
签名算法ID
发行者名称
有效期限
主体名称
主体公钥
发行者的惟一标识
主体的惟一标识
扩展
发行者的签名
SSL Handshake Protocol:
第一阶段:ClientHello:
支持的协议版本,比如tls 1.2;
客户端生成一个随机数,稍后用户生成“会话密钥”
支持的加密算法,比如AES、3DES、RSA;
支持的压缩算法;
第二阶段:ServerHello
确认使用的加密通信协议版本,比如tls 1.2;
服务器端生成一个随机数,稍后用于生成“会话密钥”
确认使用的加密方法;
服务器证书;
第三阶段:
验正服务器证书,在确认无误后取出其公钥;(发证机构、证书完整性、证书持有者、证书有效期、吊销列表)
发送以下信息给服务器端:
一个随机数;
编码变更通知,表示随后的信息都将用双方商定的加密方法和密钥发送;
客户端握手结束通知;
第四阶段:
收到客户端发来的第三个随机数pre-master-key后,计算生成本次会话所有到的“会话密钥”;
向客户端发送如下信息:
编码变更通知,表示随后的信息都将用双方商定的加密方法和密钥发送;
服务端握手结束通知;
组件:
libcrypto, libssl主要由开发者使用;
openssl:多用途命令行工具
openssl:
从多子命令,分为三类:
标准命令:openssl
消息摘要命令(dgst子命令):即提取数据指纹信息
加密子命令
enc子命令:对数据对称加密
genrsa子命令:生成非对称加密的私钥
rsa子命令:由从私钥中提取公钥
生成证书:通过req子命令实现
证书签名:通过ca子命令实现
随机数:通过子命令rand生成随机数
密码:通过子命令passwd实现
提取数据指纹信息:openssl dgst -md5 文件
[[email protected] ~]# openssl dgst -md5 fstab MD5(fstab)= e362fe2945c3b2949a72a670b4fdaac4 [[email protected] ~]#
对数据加密(使用对称加密):
加密:openssl enc -e -des3 -a -salt -in 源文件 -out 加密文件
解密:openssl enc -d -des3 -a -salt -in 加密文件 -out 解密后文件
[[email protected] ~]# openssl enc -e -des3 -a -salt -in fstab -out fstab.test enter des-ede3-cbc encryption password: Verifying - enter des-ede3-cbc encryption password: [[email protected] ~]# ls anaconda-ks.cfg fstab.test install.log.syslog 模板 图片 下载 桌面 fstab install.log 公共的 视频 文档 音乐
可以查看一下fstab.test这个文件,会发现是乱码。
下面来解密看看
生成非对称加密的私钥:openssl genrsa -out 存储私钥的文件 私钥长度
因为私钥只能自己拥有,因此除了自己以外任何人都不能有权限,使用()是的其运行在子shell中,而子shell的umask值不会影响父shell的umask值,这样比较方便。
由从私钥中提取公钥:openssl rsa -in 私钥文件 -pubout
生成随机数:openssl rand -hex(-base64) 随机数长度
[[email protected] ~]# openssl rand -base64 12 SknvVjzp0eGpympv [[email protected] ~]#
生成密码:openssl passwd -1 -salt 数字
新建CA证书:
其配置文件在/etc/pki/tls/openssl.cnf,主要内容如下:
默认CA:
CA目录为:/etc/pki/CA/ 即所有的CA相关数据文件都放在这个目录下面
/etc/pki/CA/certs/:所有已签的证书都放在这个目录下面
/etc/pki/CA/crl/:吊销的证书存放位置
/etc/pki/CA/index.txt:已经颁发的证书的索引放在这个文件中
/etc/pki/CA/serial:颁发一个证书的当前序列号码
/etc/pki/CA/crlnumber:当前吊销证书的系列号码
/etc/pki/CA/cacert.pem:CA的自签证书
/etc/pki/CA/private/cakey.pem:CA的私钥
/etc/pki/CA/newcerts:默认的新证书的存放位置(还没签的证书)
当然还有很多的信息在这个配置文件中多可以找到
第一步;生成CA私钥,然后用私钥自签CA证书
[[email protected] ~]# ls /etc/pki/CA cacert.pem certs crl newcerts private [[email protected] ~]# ls /etc/pki/CA/private/ cakey.pem [[email protected] ~]#
需要建立必要的目录文件:
必要的目录有:certs,crl,newcerts
必要的文件有:serial,index.txt
[[email protected] ~]# touch /etc/pki/CA/{serial,index.txt} [[email protected] ~]# ls /etc/pki/CA/ cacert.pem certs crl index.txt newcerts private serial [[email protected] ~]# echo 01 > /etc/pki/CA/serial [[email protected] ~]# 第一次创建因此需要手动输入一个序列号
以httpd服务为例,在另一个机器上的/etc/httpd/下建一个ssl目录,然后生成待签证书
注意此证书后缀为csr
然后发给CA
然后到CA机器上签这个证书
openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365
然后就可以了
[[email protected] ~]# openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.srt -days 365 Using configuration from /etc/pki/tls/openssl.cnf Check that the request matches the signature Signature ok Certificate Details: Serial Number: 1 (0x1) Validity Not Before: Apr 10 10:28:34 2016 GMT Not After : Apr 10 10:28:34 2017 GMT Subject: countryName = CN stateOrProvinceName = beijing organizationName = magedu organizationalUnitName = ops commonName = www.magedu.com emailAddress = email.magedu.com X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: CC:7A:4A:58:76:BB:07:45:D0:85:A6:8A:02:65:0D:07:34:52:06:40 X509v3 Authority Key Identifier: keyid:5D:A4:BC:13:7F:AD:BA:D5:FF:90:5E:D2:E5:19:BA:58:25:8B:09:43 Certificate is to be certified until Apr 10 10:28:34 2017 GMT (365 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated [[email protected] ~]#
然后就可以查看证书信息了:openssl x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject
吊销证书:
步骤:
(1) 客户端获取要吊销的证书的serial(在使用证书的主机执行):
~]# openssl x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject
(2) CA主机吊销证书
先根据客户提交的serial和subject信息,对比其与本机数据库index.txt中存储的是否一致;
吊销:
# openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem
其中的SERIAL要换成证书真正的序列号;
(3) 生成吊销证书的吊销编号(第一次吊销证书时执行)
# echo 01 > /etc/pki/CA/crlnumber
(4) 更新证书吊销列表
# openssl ca -gencrl -out thisca.crl
查看crl文件:
# openssl crl -in /PATH/FROM/CRL_FILE.crl -noout -text