互联网造成的初期,更多关注的是设备之间经过网络相互访问功能的实现,咱们都知道,两个设备之间要想相互通讯,就必需遵循某种协议,因而早期的互联网也出现来众多的协议,好比传输层最著名的协议就是tcp和udp,而应用层比较著名的协议有:http、ftp、pop、smtp、dns、telnet等等,而这些协议这开发初期,更可能是关注功能的实现,数据这网络上传输是明文方式的,不多关注两个设备之间相互通讯的安全性问题,而随着互联网不断的高速发展,已经深刻到社会的各行各业,无时无刻不在影响着人们的生活,对于一些安全性要求较高的行业,迫切的须要一种安全协议,以保重数据传输的安全性,因而就有来咱们今天要谈的OpenSSL。算法
在说OpenSSL以前,首先让咱们认识一下SSL,其实SSL是Secure Socket Layer的简写,也就是所谓的安全套接字层协议,以及其继任者TLS(Transport Layer Security,传输层安全)是为网络通讯提供安全及数据完整性的一种安全协议,TLS和SSL都是在传输层对网络进行加密,说到加密就不得不说一下加密的种类,常见的加密种类有:浏览器
1)对称加密:加密和解密使用同一个密码,它是将明文分隔成固定大小的块,而后逐个进行加密。安全
2)公钥加密:也叫非对称加密,为何叫非对称加密那,是由于它是成对儿出现的,公钥是从私钥中提取而来,使用公钥加密只能使用与此公钥配对儿的私钥解密,也就是所使用公钥加密必需要有一对儿密钥:私钥(secret key)、公钥(public key);公钥加密经常使用于身份认证、密钥交换、数据加密。服务器
3)单项加密:提取数据的特征码,因为具备定长输出、雪崩效应、不可逆的特性,经常使用于验证数据完整性使用。网络
SSL协议主要提供如下服务:架构
1)认证用户和服务器,确保数据发送到正确的客户机和服务器;
2)加密数据以防止数据中途被窃取;
3)维护数据的完整性,确保数据在传输过程当中不被改变。运维
有了以上SSL的认识以后,那么一次加密的通信过程是怎么样的呢?咱们大体能够这样理解,首先从发送方来说:tcp
1)发送方会使用单项加密算法提取生成数据的特征码ide
2)而后使用本身的私钥加密特征码附加到数据后面工具
3)生成用于对称加密的临时密钥
4)用此临时密钥加密数据和已经使用私钥加密后的特征码
5)使用接收方的公钥加密此临时密钥,附加在对称加密后的数据后方
而后从接收方来说:
1)使用本身的私钥解密加密的临时密钥;从而得到对称密钥;
2)使用对称密钥解密对称加密的 数据和私钥加密的特征码密文;从而得到数据和特征码密文;
3)使用发送方的公钥解密特征码密文,从而得到从计算生成的特征码;
4)使用与对方一样的单向加密算法计算数据的特征码,并与解密而来的进行比较;
从以上的介绍中咱们能够简单的了解到一次加密的通信过程的大体步骤,可是实际的网络通信中远不止这些,实际的网络通信架构中主要有C/S(客户端/服务器)架构和B/S(浏览器/客户端)两种架构,就拿最常使用的Web服务来讲,Web服务使用B/S(浏览器/客户端)架构并且使用TCP这种可靠的有链接的协议,众多的浏览器用户如何去验证一个网站确实是它声称的这个网站那,这里就牵涉到一个数字签名和数字证书的问题了,我想每个初学者都会产生这样一个疑问,什么是数字证书,什么又是数字签名?数字证书是由权威机构--CA证书受权(Certificate Authority)中心发行的,能提供在Internet上进行身份验证的一种权威性电子文档,人们能够在互联网交往中用它来证实本身的身份和识别对方的身份。
数字签名(又称公钥数字签名、电子签章)是一种相似写在纸上的普通的物理签名,可是使用了公钥加密领域的技术实现,用于鉴别数字信息的方法。一套数字签名一般定义两种互补的运算,一个用于签名,另外一个用于验证。要想弄明白这个问题,能够参考这个网http://netsecurity.51cto.com/art/201108/287971.htm 这里图文并茂的解释了数字签名和数字证书的做用,其实把数字签名想象为现实中咱们本身的签名,把数字证书想象成咱们每一个人的×××,这样就更能帮助咱们理解什么是数字签名以及什么是数字证书,就比如咱们每一个人均可以本身签名,可是每一个人也必须有一张属于本身的×××同样(固然个别神通广大的人会拥有多张×××的人再也不咱们的讨论范围内)。
说了这么多,让咱们来看看数字正常的格式是什么以下图:
有了以上的基础认识,对于咱们理解和使用OpenSSL来说有着很是重要的做用,OpenSSL 是一个强大的安全套接字层密码库,Apache使用它加密HTTPS,OpenSSH使用它加密SSH,可是,你不该该只将其做为一个库来使用,它仍是一个多用途的、跨平台的密码工具包括了主要的密码算法、经常使用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。
要想更好的使用OpenSSL先来认识一下OpenSSL的命令
前面曾提到OpenSSL是一个多用途的、跨平台的密码工具,那个OpenSSL如何对一个普通文件进行加解密、生成密码、生成随机数、生成私钥那?
加密和解密:
openssl enc -e -CIPHERNAME -a -salt -in /PATH/FROM/SOMEFILE -out /PATH/TO/SOMECIPHERFILE
openssl enc -d -CIPHERNAME -a -salt -in /PATH/FROM/SOMECIPHERFILE -out /PATH/TO/SOMEFILE
enc是openssl的一个子命令,
-e表示加密
-d表示解密
-CIPHERNAME表示指明用那种算法进行加密
-salt表示随机添加一段杂质
-in表示指明对那个文件进行加密
-out表示指明加密后输出文件的路径即名称
单项加密:
openssl dgst -CIPHER /PATH/TO/SOMEFILE
dgst是openssl的一个单项加密子命令
– CIPHER表示指明加密算法
生成密码:
openssl passwd -1 -salt NUM
生成随机数:
openssl rand -hex|-base64 NUM
-hex表示以十六进制编码格式输出
-base64表示文本编码格式输出
生成私钥:
openssl genrsa -out /PATH/TO/PRIVATE_KEYFILE NUM_BITS
genrsa是openssl命令生成私钥的一个子命令
-out /PATH/TO/PRIVATE_KEYFILE 指明生成的私钥输出位置以及名称
NUM_BITS指明生成私钥的位数
从私钥中提取公钥:
openss l rsa -in /PATH/FROM/PRIVATE_KEY_FILE -pubout
rsa是openssl命令提取公钥的一个子命令
-in /PATH/FROM/PRIVATE_KEY_FILE指明从哪一个私钥中提取
-pubout指明提取的公钥的名称
从以上能够看出openssl的强大功能,可是众所周知数字证书是由权威机构--CA证书受权(Certificate Authority)中心发行的,那么如何构建咱们本身的私有CA那,openssl一样能够作到,首先来看构建私有CA的步骤:
1、生成私钥文件
2、生成自签证书
3、提供辅助文件
touch /etc/pki/CA/index.txt
echo 01 > /etc/pki/CA/serial
到此咱们的私有CA已经创建完毕,可是创建私有CA的主要做用就是给各个节点发证书,这里咱们在本机来模拟节点申请证书,节点申请证书须要以下步骤:
1、生成私钥
2、生成证书签署请求
3、把请求发送给咱们创建的私有CA
因为我在本机请求,因此直接copy过去就能够
到此咱们的节点申请证书的请求以及请求完毕,这时就须要私有CA为这个节点申请的证书作签发证书,CA签发证书一样也有三个步骤:
1、验证请求者的信息
2、签发证书
3、把签发好是证书发还给请求者
这时咱们已经正常签署了该节点的证书请求,该证书已经能够正常使用了。
以上说了这么多CA的相关信息,那CA证书到底有什么做用那?
1、验证网站是否可信(针对HTTPS)有了证书以后,当你的浏览器在访问某个 HTTPS 网站时,会验证该站点上的 CA 证书(相似于验证介绍信的公章)。若是浏览器发现该证书没有问题(证书被某个根证书信任、证书上绑定的域名和该网站的域名一致、证书没有过时),那么页面就直接打开;不然的话,浏览器会给出一个警告,告诉你该网站的证书存在某某问题,是否继续访问该站点
大多数知名的网站,若是用了 HTTPS 协议,其证书都是可信的(也就不会出现上述警告)。因此,从此你若是上某个知名网站,发现浏览器跳出上述警告,你就要当心啦!
2、验证某文件是否可信(是否被篡改)
证书除了能够用来验证某个网站,还能够用来验证某个文件是否被篡改。具体是经过证书来制做文件的数字签名。
随着互联网愈来愈深刻的发展,网络的安全性愈来愈受到重视,掌握好OpenSSL的使用也将考验每一个运维工程师的所必备的技能。