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

1、为何要加密html

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

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

对称加密windows

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

算法安全

特色bash

DES服务器

64b定长输出网络

3DESide

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

Twofish

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

AES

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

非对称加密每每须要使用多个密码进行通讯,因此致使密钥分发消耗资源。

非对称加密

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

身份认证:因为非对称加密的密钥一般会成对出现,若是一方使用其私钥加密一段数据,而另外一方用其公钥能解密,则可肯定其身份。

密钥交换:当通讯双方须要交换密钥时,如AB发送密钥,则可把密钥用B的私钥进行加密,而后再发给A,只有A才能对其进行解密,因此这样就确保了其密钥不被其余用户获取。

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

常见算法

特色

RSA

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

DSA

分组较短、密钥也比较短

ELGamal

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

单向加密

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

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

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

 

 

算法

特征

MD5

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

SHA1

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

SHA256

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

 

3、实现安全的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三次握手后对服务器的证书进行验证,因此整个实验基本流程以下图所示:

wKioL1U5vm7Dq7U3AAEhLIyLAMk155.jpg


1.生成自签证书

A.生成私钥

[root@localhost CA]#  (umask 077; openssl genrsa -out private/cakey.pem 2048)


B.生成自签证书

[root@localhost CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3600
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) [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.com
Email Address []:admin@wuxiaotao.com


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

[root@localhost CA]# mkdir certts crl netcerts#:若文件已建立则略过
[root@localhost CA]# echo 01 >serial


2.客户端生成证书

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

[root@localhost etc]# mkdir /etc/httpd/ssl


B.生成私钥

[root@bogon ssl]#  (umask 077; openssl genrsa -out httpd.key 2048)
生成证书
[root@localhost ssl]#openssl req -new -key httpd.key -out httpd.csr
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) [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.com
Email Address []:www@wuxiaotao.com
 
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:


3.发往客户端让CA签名

 [root@localhost ssl]# openssl ca -in /etc/httpd/ssl/httpd.csr -out /tmp/httpd.crt -days 3600
[root@localhost ssl]# openssl ca -in /etc/httpd/ssl/httpd.csr -out /etc/httpd/ssl/httpd.crt -days 3600
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 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              = www@wuxiaotao.com
        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]y
Write out database with 1 new entries
Data 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#:修改私钥存放位置

新建虚拟主机目录:

[root@localhost conf.d]# mkdir /var/www/wuxiaotao.com

为主机提供主页

[root@localhost conf.d]# echo "hello" >/var/www/wuxiaotao.com/index.html 

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

wKiom1U5ujHBsrH2AAOKYaIHeRE448.jpg

重启httpd服务并测试

 

wKiom1U5un6ije4GAAJadPt7nJM660.jpg

相关文章
相关标签/搜索