漫漫运维路——各种加密方式介绍及基于OpenSSL实现HTTPS

一、为什么要加密

在网络中通信有时通信双方会发送一些比较敏感的信息,如果直接明文在网上传输,就可能被居心叵测的人截获,从而达到其非法的目的。为保证通信双方信息传输不被第三方所知晓,使用加密技术把双方传输的数据进行加密,即使数据被第三方所截获,那么第三方也不会知晓其数据的真实含义。在此,通信双方所交换的信息中,未被加密的数据称为明文,而加密后的数据称为密文,加密采用的方式称作加密密钥。

二、常见加密方式以及其用途

对称加密

对称加密是指在加密通信过程中,把明文加密为密文的密钥和把密文解密为明文的密钥是同一个,加密时通常把明文切割为大小固定的数据块,逐个进行加密,此种加密方式比较简单,容易被暴力破解。常见的对称加密算法详见下表:


算法


特点


DES


64b定长输出


3DES


使用54b密钥对数据进行三次加密


Twofish


使用任何长度为256比特的单个密钥


AES


可快速加解密,且需要存储少

非对称加密往往需要使用多个密码进行通信,所以导致密钥分发消耗资源。

非对称加密

非对称加密又叫做公钥加密,顾名思义,就是通信双方加密和解密使用不同的密钥,通常使用非对称加密都有两个密钥,一个被称为公钥,一个被称为私钥,私钥顾名思义,就是由生产的个体自己保留,不外传,而公钥则会公开,用于提供给别人加密使用。另外公钥是从私钥中提取出来的,所以要有公钥得先生产私钥。非对称加密用途有如下三样:

身份认证:由于非对称加密的密钥通常会成对出现,如果一方使用其私钥加密一段数据,而另一方用其公钥能解密,则可确定其身份。

密钥交换:当通信双方需要交换密钥时,如A向B发送密钥,则可把密钥用B的私钥进行加密,然后再发给A,只有A才能对其进行解密,所以这样就确保了其密钥不被其他用户获取。

数据加密:在通信时通信双方还可以直接使用非对称加密进行数据加密,但是加密效率不高。


常见算法


特点


RSA


密钥较长,被破解可能性小


DSA


分组较短、密钥也比较短


ELGamal


加密过程较为繁琐,但比较安全

单向加密

单向加密时加密方式中的另外一种,此类算法只负责加密,不负责解密,在Linux中也比较常见,那就是/etc/shadow中保存用户密码的密码串,那就是使用单向加密算法加密再存放的。单向加密还有一个特性,就是其具有雪崩效应,数据的微小变化会引起加密结果的巨大改变。

使用单向加密,最常见的是用于数据完整性的校验,数据提供方先生成数据,然后使用单向加密算法计算出特征码,然后通过可信的手段传递给数据的接收方,并告诉其使用的加密算法和密钥,然后接收方接收到后使用数据提供方给的加密算法和密钥对数据再次提取特征码,如果所提取的特征码和对方提供的一样,则认为数据完整。

常见的单向加密算法如下所示:


算法


特征


MD5


压缩性、容易计算、抗修改等


SHA1


512的数据块大小,分别处理每一数据块


SHA256


属于哈希类算法中的一种,其数据块大小为256

三、实现安全的WEB服务——HTTPS

HTTPS服务中如何确保数据传输过程中的安全性

首先考虑如下几个问题,如何确保通信双方身份可信?

在WEB服务中要想验证通信双方的身份,则只有一个办法,就是由具有公信力的第三方机构为WEB服务器做公证,证明当前通信的WEB服务器就是我们期望的服务器,要想对WEB服务器进行身份验证,可使用认证的机制,由证书颁发机构向服务器颁发证书,然后通信时服务器先把证书发给客户端,客户端接收到后确认证书的真实有效性后再接收来自服务器端的数据。

接下来面临第二个问题,如何加密双方通信数据?

链接建立之后,虽然可以验证服务器的身份,但是数据要在网络上传输就要面临一个问题,就是要确保其不被别人监听,所以在此要对数据进行加密。而加密则要让客户端和服务器都能高效解密对方所发数据且第三方无法解密,所以在此就要使用公钥加密算法。首先在服务器向客户端发送证书的时候,服务器就会生成一对密钥,并且把公钥附加在证书上发给客户端,客户端接收到并确认服务器身份后,客户端自己使用对称加密算法生成密钥,使用接收到的公钥加密自己生成的密钥后发送给服务器端,服务器接收到后使用自己的私钥进行解密,从而获取到双方通信的密钥,从此双方就可以使用客户端生成的密钥进行加密了。而就算第三方截取到数据也密钥密钥,不能解密。

第三个问题,如何确认数据在传输过程中未被其他人所修改,在数据传输过程中,虽然有了前面的机制,可确保别人无法监听,但是一旦被截获,然后第三方虽然看不到其内容,在数据内添加额外数据后再发给客户端,客户也无从得知。所以此时就要用种机制能确保数据的完整性。在此可使用单向加密算法,首先数据的传输方先使用单向加密算法提取其特征码,然后把特征码附加到数据的首部,当接收方接收到数据后使用相同的算法再次对数据提取特征码,如果和受到的特征码一样,则未被修改,否则则数据可能已被更改。

SSL介绍

SSL 是Security Socket Layer的缩写,是一个实现网络之间加密通信的协议,早期Netscape为了确保让TCP/IP协议传输信息的安全性,在TCP/IP四层协议的传输层之上应用层之下加了半层,从而把从应用层传下来的数据进行加密然后再发生出去,确保数据在传输时不被监听和截取,并且把该层命名为了Security Socket Layer,从此就被用作网络中安全通信的标准。

SSL当前版本为3.0,现在也主要用于加强WEB浏览器和服务器之间的身份认证和数据加密的传输。

OpenSSL介绍

OpenSSL是一个功能强大的安全套接字密码库,其中包含了最常见的加密算法、常用的证书和证书管理功能及SSL协议等,可使用OpenSSL管理密钥生成证书,且还可以使用其模仿实现CA的所有功能。

使用OpenSSL+apache可以构建出HTTPS站点,结合数据的通信方式实现过程大致需要几个步骤,首先建立CA、然后建立WEB服务器并生成证书、然后WEB服务器把证书发送给CA,由CA签名后回传给WEB服务器,最后在WEB服务器上安装模块,为HTTPS提供测试首页即可。

实现HTTPS

由于HTTPS的实现需要对客户端实现身份认证,所以整个HTTP的会话链接会在TCP三次握手后对服务器的证书进行验证,所以整个实验基本流程如下图所示:

1.生成自签证书

A.生成私钥

[[email protected] CA]#  (umask 077; openssl genrsa -out private/cakey.pem 2048)

B.生成自签证书

[[email protected] CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3600You are about to be asked to enter information that will be incorporatedinto 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 blankFor some fields there will be a default value,If you enter ‘.‘, the field will be left blank.-----Country Name (2 letter code) [CN]:State or Province Name (full name) [SiChuan]:Locality Name (eg, city) [ChengDu]:Organization Name (eg, company) [wuxiaotao]:Organizational Unit Name (eg, section) [EDU]:Common Name (eg, your name or your server‘s hostname) []:ca.wuxiaotao.comEmail Address []:[email protected]

C.为CA提供相关配置文件,

[[email protected] CA]# mkdir certts crl netcerts#:若文件已创建则略过[[email protected] CA]# echo 01 >serial

2.客户端生成证书

A.在WEB服务器上的/etc/httpd目录下新建ssl目录用于存放证书

[[email protected] etc]# mkdir /etc/httpd/ssl

B.生成私钥

[[email protected] ssl]#  (umask 077; openssl genrsa -out httpd.key 2048)生成证书[[email protected] ssl]#openssl req -new -key httpd.key -out httpd.csrYou are about to be asked to enter information that will be incorporatedinto 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 blankFor some fields there will be a default value,If you enter ‘.‘, the field will be left blank.-----Country Name (2 letter code) [CN]:State or Province Name (full name) [SiChuan]:Locality Name (eg, city) [CHENGDU]:Organization Name (eg, company) [njsy]:Organizational Unit Name (eg, section) [EDU]:Common Name (eg, your name or your server‘s hostname) []:www.wuxiaotao.comEmail Address []:[email protected] Please enter the following ‘extra‘ attributesto be sent with your certificate requestA challenge password []:An optional company name []:

3.发往客户端让CA签名

 [[email protected] ssl]# openssl ca -in /etc/httpd/ssl/httpd.csr -out /tmp/httpd.crt -days 3600[[email protected] ssl]# openssl ca -in /etc/httpd/ssl/httpd.csr -out /etc/httpd/ssl/httpd.crt -days 3600Using configuration from /etc/pki/tls/openssl.cnfCheck that the request matches the signatureSignature okCertificate Details:        Serial Number: 1 (0x1)        Validity            Not Before: Apr 24 03:03:51 2015 GMT            Not After : Mar  2 03:03:51 2025 GMT        Subject:            countryName               = CN            stateOrProvinceName       = SiChuan            organizationName          = wuxiaotao            organizationalUnitName    = EDU            commonName                = www.wuxiaotao.com            emailAddress              = [email protected]        X509v3 extensions:            X509v3 Basic Constraints:                 CA:FALSE            Netscape Comment:                 OpenSSL Generated Certificate            X509v3 Subject Key Identifier:                 A7:CC:C0:D3:10:B3:FD:4F:8B:51:0C:38:91:B1:68:9D:2E:A4:70:FB            X509v3 Authority Key Identifier:                 keyid:6E:05:A1:C8:03:E9:77:2D:17:F1:74:FD:81:8D:9E:8D:DE:42:E2:26 Certificate is to be certified until Mar  2 03:03:51 2025 GMT (3600 days)Sign the certificate? [y/n]:y  1 out of 1 certificate requests certified, commit? [y/n]yWrite out database with 1 new entriesData Base Updated

修改/etc/httpd.conf.d/ssl.conf的监听端口为本地主机ip如下

<VirtualHost 192.168.2.108:443>

ServerName www.wuxiaotao.com:443#:修改虚拟主机名

DocumentRoot "/var/www/wuxiaotao.com"#:虚拟主机目录

SSLCertificateFile /etc/httpd/ssl/httpd.crt#:***存放位置

SSLCertificateKeyFile /etc/httpd/ssl/httpd.key#:修改私钥存放位置

新建虚拟主机目录:

[[email protected] conf.d]# mkdir /var/www/wuxiaotao.com

为主机提供主页

[[email protected] conf.d]# echo "hello" >/var/www/wuxiaotao.com/index.html

在windows下打开C:\Windows\System32\drivers\etc添加IP和域名的对应条目

重启httpd服务并测试

时间: 2024-07-28 23:56:18

漫漫运维路——各种加密方式介绍及基于OpenSSL实现HTTPS的相关文章

漫漫运维路——基于CentOS6平台软件包管理1

对于Linux运维人员来说,软件包管理无疑是一份非常重要的日常工作,只有轻车熟路的管理好软件包,日常运维工作才能得以进行.在基于CentOS6或者红帽6的平台上,熟练运用RPM和yum来进行服务器软件包管理,有着重要的意义.  利用rpm包管理器管理软件  什么是rpm? rpm是红帽自主研发的一款软件包管理器,早起的rpm被称为Red hat package Manager,而后成为了Linux界软件包管理器的标准,所以现在的rpm是由RPM Package Manager的递归缩写,现在不止

漫漫运维路——基于CentOS6平台软件包管理2

上文(http://7703592.blog.51cto.com/7693592/1631539)已经介绍过使用rpm对CentOS6上的软件包进行管理,之所以强调是在CentOS6之上,是因为在新出的CentOS7上部分操作还可以更简化,而对于Linux运维工程师来说,掌握CentOS6上的使用方式,在CentOS7上就不成问题了,而接下来要谈的是另外一个软件包管理工具,或者说是rpm的前端工具--yum. 为什么要用yum 来聊一个话题,那就是Linux的特性之一:组合小程序完成复杂任务,在

漫漫运维路——Linux文本处理三剑客之sed

Sed,即Stream EDitor的缩写,是Linux操作系统中常见的文本处理工具,可以结合正则表达式简单方便地对文本进行处理.本文将以实例的方式介绍sed的基本用法. 基本使用方法 基本语法:sed [OPTION] [AddressCommand] FILE1 FILE2...... OPTION{常用} -n:静默模式,不显示模式空间 -i:直接修改源文件 -e SCRIPT -e SCRIPT:可以同时执行多个脚本 -f /APATH/TO/SED_FILE:从文件中读取脚本,执行 -

漫漫运维路之Nginx基础

Nginx是当今最流行的WEB服务器一,其特性主要有以下几点: 1.模块化设计.较好的扩展性 Nginx虽然支持模块化,但尚不能向HTTPD那样支持动态模块加载 2.高可靠 Nginx工作时,由主控进程master直接生成多个worker进程,主控进程负责解析配置文件,并启动子进程,子进程直接负责处理客户端连接请求. 3.低内存消耗 Nginx采用了分阶段资源分配技术,使得其cpu和内存占用率极低,官方宣称10000个keepalive的nginx连接只需要2.5M内存. 4.支持热部署 在不停

漫漫运维路——进程基本概念及管理相关工具介绍

进程的概念     进程是系统进行资源分配的基本单位,当一个应用程序启动时就向内核发起请求,然后由进程创建出新的进程,此时应用程序就启动了.创建进程的进程此时被称作父进程,而被创建出来的进程被称为子进程,此外子进程不可脱离父进程而存在,当一个父进程被销毁时,其子进程也会一并被销毁. 在Linux中,进程被内核所管理,内核为每一个进程虚拟处一块内存空间,所以当进程被调度到内存中执行时,只能看到自己和内核,从而避免进程之间发生冲突,影响其他进程的运行.但是进程独立并不代表其不能互相通信,当进程之间需

漫漫运维路——集群基础知识

集群的基本概念 随着计算机科学的发展,对计算机的性能要求越来越高,比如在很多流量比较大的门户网站以及科学实验环境中需要海量计算的环境,这时候就迫切需要后端的服务器性能有提升.而对于提升后端服务器性能所采用的方式有两种,其一为提升服务器本身的性能,即向上扩展,通过增加服务器的内存,CPU核心数等来实现:其二就是向外扩展,一台服务器不能完成的任务就使用两台.三台甚至更多.在此,以不同的方式把许多服务器组合起来的服务器组就是集群. 集群的分类 按照集群功能的不同,可以把集群分为以下三类: LB集群 L

漫漫运维路——基于rpm包安装实现LAMP

LAMP早期即为Linux+Apache+MySQL+PHP,以基于Linux平台的三个软件搭建出动态网页站点,而现在的LAMP不仅仅代表以上几个软件,因为现在的开源软件种类较多,网站的构建人员的选择也较多,所以现在的M可以为MySQL,也可以为maria DB或者是其他的数据库管理系统.而P则也不仅可代表PHP,在实际应用中还可能是Python.Perl.JSP等语言. 本文将基于rpm包安装的形式实现Linux+Apache+MySQL+PHP的LAMP平台,并且实现以下功能: 1.创建两个

漫漫运维路——使用sickstart实现系统自动安装

安装Linux系统时,可能需要安装多个相同的系统到不同主机上,此时如若一一指定每个主机所安系统的属性则显得十分繁琐,如设置时区,语言,键盘类型,安装完成后指定系统相关属性等,此时如果使用kickstart实现自动部署,为每一台主机设置自动安装就显得十分便捷. 实验环境介绍:使用kickstart配合vsftpd完成无人值守CentOS6.6系统安装. 实验过程 一.首先定制kickstart文件 在CentOS6.6系统上,可以直接打开/root目录下编辑anaconda-ks.cfg文件,或者

漫漫运维路——文件服务系列之VSFTP

在Linux中,用于实现文件传输和共享的服务比较多,VSFTP就是其中被使用较多的一个文件服务,而说到VSFTP就不得不说一个话题,那就是FTP. FTP即File Transfer Procotol的首字母缩写,是一个用于控制Internet上文件传输的协议,FTP协议一般采用明文进行数据传输,虽然较之安全性不如HTTPS,设置HTTP,但是其建立连接的过程比较简单,所以其传输速率就更快. FTP在完成数据传输之前就需要建立连接,而传输数据的时候又要建立专门的数据传输连接,由此可把FTP连接分