为你的网络传输加把锁(OpenSSL)

互联网形成的初期,更多关注的是设备之间通过网络相互访问功能的实现,我们都知道,两个设备之间要想相互通信,就必需遵循某种协议,于是早期的互联网也出现来众多的协议,比如传输层最著名的协议就是tcpudp,而应用层比较著名的协议有:httpftppopsmtpdnstelnet等等,而这些协议这开发初期,更多是关注功能的实现,数据这网络上传输是明文方式的,很少关注两个设备之间相互通信的安全性问题,而随着互联网不断的高速发展,已经深入到社会的各行各业,无时无刻不在影响着人们的生活,对于一些安全性要求较高的行业,迫切的需要一种安全协议,以保重数据传输的安全性,于是就有来我们今天要谈的OpenSSL

在说OpenSSL之前,首先让我们认识一下SSL,其实SSLSecure Socket Layer的简写,也就是所谓的安全套接字层协议,以及其继任者TLSTransport Layer Security,传输层安全)是为网络通信提供安全及数据完整性的一种安全协议,TLSSSL都是在传输层对网络进行加密,说到加密就不得不说一下加密的种类,常见的加密种类有:

1)对称加密:加密和解密使用同一个密码,它是将明文分隔成固定大小的块,然后逐个进行加密。

2)公钥加密:也叫非对称加密,为什么叫非对称加密那,是因为它是成对儿出现的,公钥是从私钥中提取而来,使用公钥加密只能使用与此公钥配对儿的私钥解密,也就是所使用公钥加密必须要有一对儿密钥:私钥(secret key)、公钥(public key);公钥加密常用于身份认证、密钥交换、数据加密。

3)单项加密:提取数据的特征码,由于具有定长输出、雪崩效应、不可逆的特性,常用于验证数据完整性使用。

SSL协议主要提供以下服务:

1)认证用户和服务器,确保数据发送到正确的客户机和服务器;
  2)加密数据以防止数据中途被窃取;
  3)维护数据的完整性,确保数据在传输过程中不被改变。

有了以上SSL的认识之后,那么一次加密的通讯过程是怎么样的呢?我们大致可以这样理解,首先从发送方来讲:

1)发送方会使用单项加密算法提取生成数据的特征码

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 这里图文并茂的解释了数字签名和数字证书的作用,其实把数字签名想象为现实中我们自己的签名,把数字证书想象成我们每个人的身份证,这样就更能帮助我们理解什么是数字签名以及什么是数字证书,就好比我们每个人都可以自己签名,但是每个人也必须有一张属于自己的身份证一样(当然个别神通广大的人会拥有多张身份证的人不再我们的讨论范围内)。

说了这么多,让我们来看看数字正常的格式是什么如下图:

数字证书格式.jpg

有了以上的基础认识,对于我们理解和使用OpenSSL来讲有着非常重要的作用,OpenSSL 是一个强大的安全套接字层密码库,Apache使用它加密HTTPSOpenSSH使用它加密SSH,但是,你不应该只将其作为一个库来使用,它还是一个多用途的、跨平台的密码工具包括了主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。

要想更好的使用OpenSSL先来认识一下OpenSSL的命令

命令.jpg

前面曾提到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

encopenssl的一个子命令,

-e表示加密

-d表示解密

-CIPHERNAME表示指明用那种算法进行加密

-salt表示随机添加一段杂质

-in表示指明对那个文件进行加密

-out表示指明加密后输出文件的路径即名称

单项加密:

openssl  dgst   -CIPHER  /PATH/TO/SOMEFILE

dgstopenssl的一个单项加密子命令

– CIPHER表示指明加密算法

生成密码:

openssl  passwd  -1  -salt  NUM

生成随机数:

openssl   rand  -hex|-base64  NUM

-hex表示以十六进制编码格式输出

-base64表示文本编码格式输出

生成私钥:

openssl   genrsa  -out  /PATH/TO/PRIVATE_KEYFILE  NUM_BITS

genrsaopenssl命令生成私钥的一个子命令

-out  /PATH/TO/PRIVATE_KEYFILE 指明生成的私钥输出位置以及名称

NUM_BITS指明生成私钥的位数

从私钥中提取公钥:

openss l  rsa  -in  /PATH/FROM/PRIVATE_KEY_FILE  -pubout

rsaopenssl命令提取公钥的一个子命令

-in  /PATH/FROM/PRIVATE_KEY_FILE指明从哪个私钥中提取

-pubout指明提取的公钥的名称

 

从以上可以看出openssl的强大功能,但是众所周知数字证书是由权威机构--CA证书授权(Certificate Authority)中心发行的,那么如何构建我们自己的私有CA那,openssl同样可以做到,首先来看构建私有CA的步骤:

1、生成私钥文件

生成私钥.jpg

2、生成自签证书

自签证书1.jpg

3、提供辅助文件

touch /etc/pki/CA/index.txt

echo 01 > /etc/pki/CA/serial

到此我们的私有CA已经建立完毕,但是建立私有CA的主要作用就是给各个节点发证书,这里我们在本机来模拟节点申请证书,节点申请证书需要如下步骤:

1、生成私钥

私钥证书.jpg

2、生成证书签署请求

证书签署请求.jpg

3、把请求发送给我们建立的私有CA

由于我在本机请求,所以直接copy过去就可以

到此我们的节点申请证书的请求以及请求完毕,这时就需要私有CA为这个节点申请的证书做签发证书,CA签发证书同样也有三个步骤:

1、验证请求者的信息

2、签发证书签署证书.jpg

3、把签发好是证书发还给请求者

这时我们已经正常签署了该节点的证书请求,该证书已经可以正常使用了。

 

以上说了这么多CA的相关信息,那CA证书到底有什么作用那?

1、验证网站是否可信(针对HTTPS)有了证书之后,当你的浏览器在访问某个 HTTPS 网站时,会验证该站点上的 CA 证书(类似于验证介绍信的公章)。如果浏览器发现该证书没有问题(证书被某个根证书信任、证书上绑定的域名和该网站的域名一致、证书没有过期),那么页面就直接打开;否则的话,浏览器会给出一个警告,告诉你该网站的证书存在某某问题,是否继续访问该站点

大多数知名的网站,如果用了 HTTPS 协议,其证书都是可信的(也就不会出现上述警告)。所以,今后你如果上某个知名网站,发现浏览器跳出上述警告,你就要小心啦!

2、验证某文件是否可信(是否被篡改)

证书除了可以用来验证某个网站,还可以用来验证某个文件是否被篡改。具体是通过证书来制作文件的数字签名。

 


随着互联网越来越深入的发展,网络的安全性越来越受到重视,掌握好OpenSSL的使用也将考验每个运维工程师的所必备的技能。

 

原创文章,作者:zhang,如若转载,请注明出处:http://www.178linux.com/9567

(0)
zhangzhang
上一篇 2015-12-06
下一篇 2015-12-06

相关推荐

  • 8.3号,第6天

    三种权限rwx对文件和目录的不同意义: 权限对于目录的意义: 1,r权限:拥有此权限表示可以读取目录结构列表,也就是说可以查看目录下的文件名和子目录名,注意:仅仅指的是名字。 2、w权限:拥有此权限表示具有更改该目录结构列表的权限,总之,目录的w权限与该目录下的文件名或子目录名的变动有关,注意:指的是名字。具体如下:      …

    Linux干货 2016-08-05
  • shell脚本之 select 循环菜单及 函数

    select 循环与菜单 select variable in list    do      循环体命令   done select 循环主要用于创建菜单,按数字顺序排列的菜单项将显示在标准错误上,并显示PS3 提示符,等待用户输入 用户输入菜单列表中的某个数字,执行相应的命令…

    Linux干货 2016-08-22
  • Linux基础知识之文本处理三剑客sed

    处理文本的工具sed     1.sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”。接着用sed命令处理缓冲区中的内容,完成处理后,把缓冲区中的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。sed主要用来自动编…

    Linux干货 2016-08-11
  • 内置数据结构,列表及其方法

    List:列表有若干个元素,元素可以是任意对象,元素有顺序,可以使用索引和迭代,使用线性结构,使用[ ]进行描述,在内存中的空间是连续的,每个元素在内存中的空间是一样的………列表是可变的,列表不能一开始就定义大小,列表索引不可以超界   列表索引l.index(),从左向右搜索,发现第一个匹配的,自动返回搜索的值的索引;匹配不到,抛出异常Value…

    Linux干货 2018-03-25
  • MySQL Replication (MySQL的主从复制)

    MySQL Replication(MySQL的主从复制) 主从数据库的工作模型: 工作要点:1、主服务器要开启二进制日志 2、从服务器要有一个用户账户,这个账户要有权限到主服务器上请求二进制事件,请求完后保存到本地。 3、从服务器上要有一个线程,从中继日志中不断的读事件,在本地replay。 Master/Slave    &…

    Linux干货 2016-11-21
  • 集中管理利器-puppet快速入门-中

    集中管理利器-puppet快速入门-中 6.    尝试启动master puppet 启动master puppet,并确认8140端口已被监听:  #puppet返回成功,但不一定能成功启动,puppet这个功能希望能改进… 7.    目录结构 /etc/puppet/  …

    Linux干货 2015-05-04