1.1 网络安全知识

1.1.1 网结安全出现背景

网络就是实现不同主机之间的通讯,网络出现之初利用TCP/IP协议簇的相关协议概念,已经满足了互连两台主机之间可以进行通汛的目的,虽然看似简简单单几句话,就描述了网络概念与网络出现的目的,但是为了真正实现两台主机之间的稳定可靠通讯,其实是一件非常困难的事情了,如果还要再通讯的基础上保证数据传输的安全性,可想而知,绝对是难上加难,因此,网络发明之初,并没有太关注TCP/IP互联协议中的安全问题。

对于默认的两台主机而言,早期传输数据信息并没有通过加密方式传输数据,设备两端传输的数据本身实际是明文的,只要能截取到传输的数据包,就可以直接看到传输的数据信息,所以根本没有安全性可言。

1.1.2 网络安全涉及问题

早期网络设备间进行通讯时,是采用明文逬行数据传输的,并没有网络安全技术可言。我们可以提出一种假设,如果在网络上的两台主机之间传输数据,就是采用明文的方式;并且对于网络传输而言,并没有相关的网络安全技术保驾护航,这样在互联网上进行数据传输,都有哪些网络风险需要进行面对。

Ø 网络安全问题--数据机密性

在网络传输数据信息时,对数据的加密是至关重要的,否则所有传输的数据都是可以随时被第三方看到,完全没有机密性可言。 

Ø 网络安全问题--数据完整性

网络传输数据的完整性,也是安全领域中斋要考虑的里要环节,如果不能保证传输数据的完整性,那传输过程中的数据就有可能被任何人所篡改,而传输数琚双方又不能及早的进行发现,将会造成互连通汛双方所表达信息的意义完全不一致。因此,对于不芫整的数据信息,接收方应该进行相应判断,如果完整性验证错误,就拒绝接收相应的数据。

Ø 网络安全问题--身份验证问题

网络中传输数据时,很有可能传输的双方是第一次建立连接,进行相互通讯,既然是第一次见面沟通,如何确认对方的身份信悤,的确是我要进行通讯的对象呢?如果不是正确的通讯对象,在经过通讯后,岂不是将所有数据信息发送给了一个陌生人。

1.2 网络安全问题的解决

1.2.1 网络安全解决问题如何保证数据的机密性

Ø 数据机密性解决思路--利用普通算法解决机密性

为了保证数据的机密性,首先可以采用的方法就是将数据通过相应算法,转换为其它的数据信息,然后再通过相应算法反推出真正的数据是什么,这样一来就保证了数据在网络传输过程中安全性,不会被其它人轻易的看到传输过程中的数据信息.数据加密前的信息称为明文数据(plaintext,经过加密算法转换后进行传输的信息称为密文数据(ciphertext;反之经过解密算法转换后,会将密文数据恢复为明文数据进行显示接收。

 HTTPS 原理与证书实践

- 数据机密性处理示意图

优点:

实现了数据机密传输,避免了明文传输数据的危险性。

缺点:

利用加密算法,将明文改密文,如果第三方获得加密算法,即可将传输密文再次变为明文

Ø 数据机密性解决思路--利用对称加密算法解决机密性

普通算法虽然已经解决了明文数据的机密性,可以在网络传输过程中不被直接看到明文数据。但是新的问题又产生了,既然明文数据是通过算法改变成了新的数据信息,如果第三方获得了算法,利用算法也是可以将密文数据信息,再次转换为明文数据信息,因此出现了对称加密算法,形象比喻来说:数据加密算法就好比是一本密码规则手册,而对称加密算法就是将手册放在了一个保险柜中进行了上锁传输,只有传递数据信息的双方知道打开保险柜的密码。

 HTTPS 原理与证书实践

- 数据机密性处理示意图

1.2.2 网络安全解决问题-如何保证数据的完整

Ø 数据完整性解决思路--利用单项加密算法

利用数据的单项加密算法(提取数据指纹),进行提取数据特征码的方式,从而完成数据传输的完整性验证.实际的算法实现过程为:在一段明文数据信息后加上数据信息的特征码,这个特征码是通过结合数据信息进行相应算法获得的数据特征码,接收方当收到数据信息后,会利用相同的加密算法对获取的数据进行加密,确认加密后得到的特征码是否与传送过来数据后面描述的特征码一致;如果一致,可以表示数据没有被篡改过,如果不一致表示数据完整性遭到了破坏,数据一概不予以接收处理。

 HTTPS 原理与证书实践

Ø 数据完整性解决思路--利用单项加密算法(加密特征码)

由于可能存在中间人攻击的可能性,因此可以对传输过程中数据特征码进行加密,发送方利用对称密钥方式对手中的特征码进行加密,接收方会利用相同的密钥对手中的特征码进行解密,从而确认特征码是否一致.如果中间人将新的特征码也进行了加密,发送给接收方,但接收方无法利用和发送方协商好的解密密钥对特征码进行解密,最终无法识别中间人发送过来的数据特征码信息。

 HTTPS 原理与证书实践

在此需要了解一下加密算法的原理

通讯双方需要进行数据密钥信息约定(密钥协商过程),在密钥相互可以获悉的过程中,需要借助密钥交换机制(Internet key exchange IKE,进而实现密钥的交互。为了满足网络中,两台主机间密钥交换统一的过程,需要引入一种新的协议diffie-hellman协议。

diffie-hellman协议算法实现的过程:

1) 首先发送方选取一个大素数P(只能被1和自己整除的数),再选取一个生产数g ,并且发送方将Pg经过互联网传输到接收方。

2) 数据传输的两端,发送方选取一个随机数x,接收方选取一个随机数y;发送方只知道随机数x ,接收方只知道随机数y , xy不在互联网上进行传输。

3) 接收数据双方开始进行计算,对于发送方进行计算gx次方对P取模的结果,传输给接收者;而接收方进行计算gy次方对P取模的结果,传输给发送者。

4) 此时对于接收方获取到了发送方的gx次方对P取模的结果,在取模结果的基础上进行y次方的运算,y就是接收方自身产生的随机数y;而对于发送方获取到了接收方的gy次方对P取模的结果,在取模结果的基础上进行x次方的运算。x就是发送方自身产生的随机数x#此次,双方的加密运算密钥就实现了交换,并且是统一一致的,最终的密钥为gxy次方对P取模的结果。

HTTPS 原理与证书实践 

- diffie-hellman协议算法示意图

通过diffie-hellman协议算法最终可以实现了网络传输双方的密钥交换,并且通讯的双方也从此不用再对密钥进行管理记忆,只需要在进行传输数据前,逬行一次密钥的交换过程;即完成了对称密钥的生成过程。

并且如果网络中有攻击者在尝试破解出交换密钥时,就算通过比较复杂的数学运算,获悉了密钥,但也只是了解了上一次的数据交换密钥信息;下一次数据传输双方通讯时,还会交换新的密钥用于新的数据传输。 

1.2.3 网络安全解决问题-如何进行传输双方身份验证

Ø 网络安全身份验证解决方案

以上信息只是解决密钥的交换获取问题,但是网络的身份验证问题依旧没有逬行解决,换句话说,通讯双方的确可以获取统一的密钥信息了,并且是通过相对安全的方式获取得知的,但是通讯双方在交换获取密钥前,又怎么确认得知,交换密钥的对方的确是要逬行通讯的发送方或接收方呢?

Ø 安全身份验证解决思路-利用非对称密钥加密箅法(公钥加密算法)

利用非对称加密算法(公钥加密算法),可以从根本上有效解决网络中,数据传输双方的安全身份验证问题。非对称加密算法中,存在密钥对的概念,即拥有公钥(public key)与私钥(pnvate key,其中公钥不是自行创建出来的而是从私钥中提取出来一部分作为公钥,因此可以说公钥是来自于私钥的,而私钥才决定了密钥加密的安全性,于是私钥的长度可能会非常长,从最初的1024,2048,4096一直到更多的位数,将私钥密钥位增加的很长,从而提升了密钥安全性。

利用非对称加密算法,需要遵循一个基本原则:公钥加密的只能利用与之配对的私钥进行解密,反之也是一祥的.但是非对称加密算法并不能用于对数据完整性进行验证,因为私钥只有一份,但公钥可以有很多份。尽管非对称加密算法不能满足数据 完整性验证,但完全可以满足对传输者身份验证的需求,因为接收者可以拥有相应的公钥,只有与之对应的发送者用相应的私钥进行加密信息,用对应的公钥自然即可解密,否则可以确认发送者身份已经发生了变化。

 HTTPS 原理与证书实践

1.3 证书的由来

1.3.1 如何获取公钥信息

默认公钥在网络中进行传递时,默认情况下也是会出现问题的如下图所示:

 HTTPS 原理与证书实践

对发送方的公钥信息进行公正步骤:(借助第三方安全机构)

a) AB端首先生成自己的公钥和私钥的密钥对,为了使对方能相佶自己的公钥信息,将自己的公钥信息告知给第三方发证机构,利用第三方机构对自己的公钥进行公证,第三方机构会制作一个数字证书(机构编号以及发证机构的联),并且第三方机构也要给自己设置一个合法的公钥和私钥,并且公钥设为第三方机构的公钥证书。

b) 发证机关计箅出数字证书数据的特征码,并用自己的私钥进行加密,并将加密的信息附加到 特征码后成为数字签名。

c) AB两锭获得公正过的证书信息,并通过证书信息传递.得到对方的公钥。

d) AB两端与第三方机构建立连接,获得第三方证书,通过第三方证书获得第三方公钥,利用第三方公钥只要能解密数字签名即可。

1.3.2 证书信息所包含什么内容

目前标准的证书存储格式是x509,还有其他的证书格式,需要包含的内容为:

ü 公钥信息,以及证书过期时间

ü 证书的合法拥有人信息

ü 证书该如何被使用

ü CA颁发机构信息

ü CA签名的校验码

互联网上使用的SSLTLS证书管理机制均使用x509的格式。

1.4 加密算法的简介

1.4.1 对称加密算法

对称加密算法特性是加密和解密使用同一个密钥,利用对称算法可以将明文改为密文(加密),密文还原为明文(解密)。

对称加密算法常见的有:

?  最早期的称为DES(Data Encryption Standard),是美国国家安全局征集加密算法时,由一个美国公司提出的,是公开可以使用的,使用的是56位的密钥长度,但是由于计算机的发展,可以使用计算机对56位的密钥进行暴力破解了,因此DES渐渐不再被使用。

?  一种新的算法.DES加密后,再进行一次DES加密,然后再进行一次DES ,称为3DES算法,是目前使用比较多的加密算法。

?  更安全的加密算法,AES(高级加密标准)加密算法产生.默认使用128位的加密密钥,但是也有特殊的AESAES192 AES256 AES512等),密钥越长安全性提高的同时,加密效率就会降低,因此应该选择比较合适的加密算法。

?  blowfish加密算法,加密不是按位进行加密的,而是将数据分成大小相同的数据块进行加密的。

1.4.2 单向加密算法

单向加密算法常见的有:

?  DH加密算法,主要用于密钥的协商交换

?  MD4 MD5(128)

?  SHA1(160) SHA(192) SHA(256) SHA(384)

?  CRC-32(循环输出校验码),不是加密机制,只是一种校验机制,不提供安全性,正常加密算法是不允许出现输入不一样,输出一样的情况,但CRC是可以有这样情况的,因为CRC只是具有校验功能,不具有加密功能。

单项加密算法的特征:

?  数据输入一祥,特征码信息输出必然相同

?  雪崩效应,输入的微小的改变,将造成输出的巨大改变

?  定长输出,无论源数据多大,但结果都是一祥的

?  不可逆的,无法根据数据指纹,还原出原来的数据信息

1.4.3 非对称加密算法

非对称加密算法可以实现身份认证功能(通过数字签名实现),数据加密功能,以及现密钥交换功能。

非对称加密算法常见的有:

?  RSA,RSA既是一个公司的名称,也是三个创始人的名称,RSA既可以加密又可以进行签名。

?  DSA,只能实现数字签名功能。

?  ELGamal,属于商业化的加密算法。

加密和解密需要算法来实现,因此需要主机上可以有相应的软件工具来控制加密和解密的算法,相应的工具就是加密和解密算法的具体实现,对称加密算法可以实现的工具:opensslgpg

1.5 OpenSSL软件介绍

HTTPS 原理与证书实践 

Netscape网景公司生产了最初的浏览器,但为了提高浏览器访问页面的安全性,对TCP/IP模型逬行了一定改逬,在传输层与应用层之间,创建了一个3.5层的槪念,称为SSLSecure Sockets Layer安全套接层)层,SSL不是一个软件,只是一个库,让应用层将数据传输到传输层前,调用了ssl层的功能对数据进行了加密,目前比较流行的版本是(SSLv2 v3)。

由于SSLNetscape公司进行定义的,不够开放性。因此为了使加密功能更加开放,TSL(传输层安全协议)协议就出现了,目前比较流行的版本是(TSLv1==sslv3, TSL更像是传输层上实现的数据加密。

1.5.1 OpenSSL软件概念说明

ssl功能的开源实现,就称为openssl,功能非常强大,几乎实现了市面上主流的加密算法,并且工作性能非常的好。openssl的言方链接:http://openssl.org/

1.5.2 OpenSSL软件组成部分

openssl是由三部分组成:

libcrpto :通用加密库

libssl:TSL/SSL功能的实现,基于会话的,实现了身份认证,数据机密性和会话完整性的 TSL/SSL

openssl:提供的命令行工具,多用途命令工具,横拟实现私有证书颁发机构;命令行工具是通过多种子命令实现openssl的相应功能

1.5.3 OpenSSL的使用

系统环境说明

[root@web01 ~]# cat /etc/redhat-release 
CentOS release 6.9 (Final)
[root@web01 ~]# uname -r
2.6.32-696.el6.x86_64
[root@web01 ~]# sestatus 
SELinux status:                 disabled
[root@web01 ~]# /etc/init.d/iptables status
iptables: Firewall is not running.

检查OpenSLL软件版本:

   方法一:

[root@web01 ~]# rpm -qa openssl
openssl-1.0.1e-57.el6.x86_64

   方法二:

[root@web01 ~]# openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013

主配置文件位置:

/etc/pki/tls/openssl.cnf  # 主配置文件位置

openssl使用帮助

HTTPS 原理与证书实践

 1 [root@web01 ~]# openssl ?
 2 openssl:Error: '' is an invalid command.
 3 # openssl: 错误: "?" 是无效命令。
 4 Standard commands  
 5 # 标准命令
 6 asn1parse         ca                ciphers           cms               
 7 crl               crl2pkcs7         dgst              dh                
 8 dhparam           dsa               dsaparam          ec                
 9 ecparam           enc               engine            errstr            
10 gendh             gendsa            genpkey           genrsa            
11 nseq              ocsp              passwd            pkcs12            
12 pkcs7             pkcs8             pkey              pkeyparam         
13 pkeyutl           prime             rand              req               
14 rsa               rsautl            s_client          s_server          
15 s_time            sess_id           smime             speed             
16 spkac             ts                verify            version           
17 x509              
18 
19 Message Digest commands (see the `dgst' command for more details)
20 # 单向加密 消息摘要命令 (有关详细信息, 请参阅 "dgst" 命令) 
21 md2               md4               md5               rmd160            
22 sha               sha1              
23 
24 Cipher commands (see the `enc' command for more details)
25 # 密码命令 (有关详细信息, 请参阅 "enc" 命令)
26 aes-128-cbc       aes-128-ecb       aes-192-cbc       aes-192-ecb       
27 aes-256-cbc       aes-256-ecb       base64            bf                
28 bf-cbc            bf-cfb            bf-ecb            bf-ofb            
29 camellia-128-cbc  camellia-128-ecb  camellia-192-cbc  camellia-192-ecb  
30 camellia-256-cbc  camellia-256-ecb  cast              cast-cbc          
31 cast5-cbc         cast5-cfb         cast5-ecb         cast5-ofb         
32 des               des-cbc           des-cfb           des-ecb           
33 des-ede           des-ede-cbc       des-ede-cfb       des-ede-ofb       
34 des-ede3          des-ede3-cbc      des-ede3-cfb      des-ede3-ofb      
35 des-ofb           des3              desx              idea              
36 idea-cbc          idea-cfb          idea-ecb          idea-ofb          
37 rc2               rc2-40-cbc        rc2-64-cbc        rc2-cbc           
38 rc2-cfb           rc2-ecb           rc2-ofb           rc4               
39 rc4-40            seed              seed-cbc          seed-cfb          
40 seed-ecb          seed-ofb          zlib              

View Code openssl使用帮助

<p>
  <span style="font-family: '微软雅黑',sans-serif;">加密一个文件的方法:</span>
</p>

<div class="cnblogs_code">
  <pre>openssl enc -des3 -salt -a -<span style="color: #0000ff;">in</span> inittab -out initab.des3 <span style="color: #008000;">#</span><span style="color: #008000;"> 输入密码后BP加密成功</span>

openssl enc -des3 -d -salt -a -in initab.des3 -out inittab # 输入钥后即解密成功