openss涉及的基本概念

基础知识

HTTPS是在HTTP的基础上和ssl/tls证书结合起来的一种协议,保证了传输过程中的安全性,减少了被恶意劫持的可能.很好的解决了解决了http的三个缺点(被监听、被篡改、被伪装)

SSL:Secure Socket Layer,安全套接字层,它位于TCP层与Application层之间。提供对Application数据的加密保护(密文),完整性保护(不被篡改)等安全服务,它缺省工作在TCP 443 端口,一般对HTTP加密,即俗称的HTTPS。

公钥:大家公用的,可以通过电子邮件发布,通过网站让别人下载,公钥其用来加密和验章。

私钥:就是自己的私有的,必须非常小心保存,最好加上 密码,私钥是用来解密和签章。

1.2 什么是数字签名(CA)?

根据百度百科说:数字签名(又可以叫公钥数字签名)是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术实现,它是用于鉴别数字信息的方法。数字签名有两种互补的运算,一个是用于签名,另一个是用于验证。

作用是:它会将报文使用一定的HASH算法算出一个固定位数的摘要信息,然后使用私钥将摘要加密,然后会将刚才的报文一起发送给接收者,接收者会通过公钥将摘要解出来。也通过hash算法算出报文摘要,如果两个摘要一致,说明数据未被篡改,说明数据是完整的。

数字签名:将报文按双方约定的HASH算法计算得到一个固定位数的报文摘要。在数学上保证:只要改动报文中任何一位,重新计算出的报文摘要值就会与原先的值不相符。这样就保证了报文的不可更改性。将该报文摘要值用发送者的私人密钥加密,然后连同原报文一起发送给接收者,而产生的报文即称数字签名。关于数字签名参考:http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html 和 http://www.youdzone.com/signature.html

1.3 什么是数字证书?

数字证书:数字证书就是互联网通讯中标志通讯各方身份信息的一系列数据,提供了一种在Internet上验证您身份的方式,其作用类似于司机的驾驶执照或日常生活中的身份证。它是由一个由权威机构-----CA机构,又称为证书授权(Certificate Authority)中心发行的,人们可以在网上用它来识别对方的身份。数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件。最简单的证书包含一个公开密钥、名称以及证书授权中心的数字签名。

作用是:它是使用CA的私钥将网站的公钥等信息进行了签名,当客户端请求服务器端的时候,网站会把证书发给客户端,客户浏览器检查服务器送过来的证书是否是由自己信赖的CA中心(如沃通CA)所签发的,客户端先通过CA的数字签名校验CA的身份,来证明证书的真实完整性。如果是,就继续执行协议;如果不是,客户浏览器就给客户一个警告消息:警告客户这个证书不是可以信赖的,询问客户是否需要继续。接着客户浏览器比较证书里的消息,例如域名和公钥,与服务器刚刚发送的相关消息是否一致,如果是一致的,客户浏览器认可这个服务器的合法身份。

 

了解到上面的非对称加密、数字签名、数字证书的概念之后,我们来看看它是如何来保证数据没有被伪造的

参考:http://blog.csdn.net/oscar999/article/details/9364101

 

CA:Certificate Authority,证书授权中心。是一个单位,来管理发放数字证书的。由它发放的证书就叫 CA 证书,以区别于个人使用工具随意生成的数字证书,查看 CA 证书,里面有两项重要内容,一个是颂发给谁,另一个是由谁颂发的。

参考:http://blog.csdn.net/mostone/article/details/22302035

SSL/TLS协议的基本思路是采用公钥加密法,也就是说,客户端先向服务器端索要公钥,然后用公钥加密信息,服务器收到密文后,用自己的私钥解密。

 

SSL 实现认证用户和服务器

现在我们来想一个问题,如果我们现在访问我们的博客园网站,我们怎么知道访问的是真博客园还是假博客园呢?为了确定我们的博客园网站的服务器有没有被伪造,在SSL中有这么一个规则:假如我们向服务器发出请求后,服务器必须返回它的数字证书给接收者,当我们拿到数字证书之后,我们可以根据里面的ca数字签名,来检验数字证书的合法性。假如我们现在能够证明数字证书是博客园的,但是不代表发送给我们证书的服务器就是博客园的呢?为了解决这个问题,其实在我们拿到的证书里面会带有博客园的公钥,在之后的通信中,客户端会使用该公钥加密数据给博客园服务器,博客园服务器必须使用私钥才能够解出里面的数据。只要他能够解出数据出来,说明他是合法的,否则的话,是伪造的。如果是伪造的,那么就不能通讯。因此SSL就解决了服务器认证的问题了。

加密数据在通讯过程中如何防止数据不被窃取呢?

客户端第一次给服务器发送请求的时候(拿到证书之前的那个请求),会在请求里面放一个随机数(比如叫A),服务器的返回证书的响应里也会带一个随机数(比如叫B), 客户端拿到证书后,会使用公钥加密一个随机数(比如叫C)发送给服务器,因此客户端,服务器就有三个随机数:A、B、C。双方使用这些随机数和一个相同的算法会生成一个密钥,以后所有的通信都使用这个对称密钥来进行的。

一般情况下,这三个密钥不可能同时被泄露的,因为它是由三个随机数随机生成的。并且其中一个随机数使用了公钥加密的。因此是通过这种方式来保证数据不被窃取的。

上面都是在网上看到的一些概念性问题,简单的理解下就好了,知道是这么个概念就行了,而我们的openssl是SSL的实现版。因此openssl的作用避免信息被窃取到,它是通过上面的知识点来做到的。

openssl的应用场景:

在使用http网站中,我们经常看到网站会有一些广告什么的,这些广告其实不是网站自己放上去的,而是中间的运营商在中间篡改了内容导致的。现在我们可以使用https技术(基于openssl)来对数据进行加密的。它能保证数据不被篡改。

openssl genrsa 命令是会用来生成 RSA 私有秘钥,不会生成公钥,因为公钥提取自私钥。生成时是可以指定私钥长度和密码保护。

如果需要查看公钥或生成公钥,可以使用 openssl rsa 命令。

X509 文件扩展名
首先我们要理解文件的扩展名代表什么。DER、PEM、CRT和CER这些扩展名经常令人困惑。很多人错误地认为这些扩展名可以互相代替。尽管的确有时候有些扩展名是可以互换的,但是最好你能确定证书是如何编码的,进而正确地标识它们。正确地标识证书有助于证书的管理。

编码 (也用于扩展名)
.DER : 扩展名DER用于二进制DER编码的证书。这些证书也可以用CER或者CRT作为扩展名。比较合适的说法是“我有一个DER编码的证书”,而不是“我有一个DER证书”。

.PEM : 扩展名PEM用于ASCII(Base64)编码的各种X.509 v3 证书。文件开始由一行"—– BEGIN …“开始。如“BEGIN RSA PRIVATE KEY”

常用的扩展名
CRT : 扩展名CRT用于证书。证书可以是DER编码,也可以是PEM编码。

 

客户端是如何验证证书的有效性的呢?

我们知道证书的签名是由数字认证机构采用他们的私有密钥生成的,为了确保对应的公钥可以到客户端的手里,在最开始公开密钥都植入到了各大浏览器里,在客户端收到公钥证书后使用植入在浏览器中的公开密钥进行解密从而验证证书的有效性,确保通信服务器的身份。

 

常见的三种加密方法:

  • 对称加密(共享密钥加密):就是加密与解密使用同一个密钥,但是在互联网的世界里我们无法确保密钥安全的传送到对方的手里,也就无法确保传输的可靠性。
  • 非对称加密(公开密钥加密):有两把钥匙,分为公钥与私钥,发送数据前我们使用公开密钥进行加密,在对方收到消息后使用对方自己未公开的私有密钥进行解密,由于私有密钥谁也不知道,所以确保了传输数据的安全性,反过来也可以使用用私有密钥进行加密,使用公开密钥进行解密。
  • 混合加密:虽然非对称加密是一种比较安全的方法,但是由于其在加密解密过程中会使用到复杂的数学运算,所以导致其传输速度较慢效率较低,所以我们在交换密钥阶段采取非对称加密方法,确保密钥安全的传输到对方手里,之后在通信阶段采用非对称加密方法进行加密,来提高传输的效率。

 DH 与RSA的区别1

迪菲·赫尔曼密钥交换(Diffie–Hellman key exchange,简称「D–H」) 是一种安全协议。它可以让双方在完全没有对方任何预先信息的条件下通过不安全信道创建起一个密钥。这个密钥可以在后续的通讯中作为对称密钥来加密通讯内容。这个DH参数不是安全敏感的,即使被第三方拿到了,也无所谓。

如果想深入一些,可以这样来理解:

1、RSA和DH使用阶段不同,都基于非对称算法。

2、RSA: 常用的示例是Alice向Bob发送消息,并使用Bob的公钥加密消息。向Bob发送消息。鲍勃用他的私钥解密。验证签名以确保Alice发送签名。该消息将成为对称加密密钥。这是用于保护连接的内容。

3、DH Diffie Hellman交换依赖于生成秘密值的两个单独实体。通过一些数学算法,他们都能够产生共同的密钥值。这是一个对称密钥。

4、使用RSA,可以进行加密和签名的密钥对。使用DH,只执行加密,没有签名机制。

RSA 和 DH 的区别2

中文可叫做完全前向保密。要求一个密钥只能访问由它所保护的数据;用来产生密钥的元素一次一换,不能再产生其他的密钥;一个密钥被破解,并不影响其他密钥的安全性。

RSA 没有向前安全性,也就是需要每次的对称加密密钥的传递都是基于 公钥加密,服务端私钥解密。如果服务端的私钥丢失了,那几年前的通信数据都有可能被解密。所以这是极度不安全的,私钥的地位太重了,如果每次的加解密都是临时生成的密码来解决安全性,才不会对私钥的安全性有如此强的依赖。在2013年的棱镜门事件中,某个CA机构迫于美国政府压力向其提交了CA的私钥,这就是十分危险的。如果向前不安全,那么之前利用该CA私钥都会全部遭殃。所以这里说的是更安全的 DH类非对称加密。

报文摘要

摘要函数用于将任意数据通过计算获取唯一对应值,而这个值的长度比较短。它是一种多对一的关系。理论上,这个短的值对应原来的数据。这个过程是不可逆的,也不能通过摘要值来计算原始数据。摘要在信息安全中有非常重要的作用。常用的摘要算法有:sha,sha1,sha256,sha512和md5

MD5的缺陷

数据采用明文传输,虽然效率比较高,但数据也很容易被中间人监听已经获取,称为中间人攻击

无法保证传输数据的完整性, 虽然有像MD5这样的散列值校验但,如果MD5本身被修改的话,也是无法确保数据的完整性的

 

RSA算法

RSA是一个广泛使用的公钥算法,其秘钥包括公钥和私钥。它能用于数字签名,身份认证以及秘钥的交换。RSA秘钥长度一般使用1024或者更高。RSA秘钥信息主要过程:秘钥生成,RSA加解密计算,签名与验证。

https://blog.csdn.net/chen55bo/article/details/78872555

https://www.cnblogs.com/Anker/p/6018032.html

posted @ 2014-12-23 16:15  南哥的天下  阅读(1201)  评论(0)    收藏  举报