ssl/tls是什么?是怎么工做的?

最近在思考一个关于邮箱服务器的问题,其中涉及到了SSL/TLS加密传输,因而想研究一下什么,究竟是怎么实现加密的,经过查找各方面的资料,发现这个涉及到的东西还蛮多的,能够单独写一篇文章整理一下本身的理解。web

SSL/TLS是什么?

SSL(安全套接字层)是一种标准安全协议,用于在在线通讯中创建Web服务器和浏览器之间的加密连接。算法

那TLS又是什么?Transport Layer Security (TLS)是SSL协议(Secure Sockets Layer)的升级版,TLS 1.0一般被标示为SSL 3.1,TLS 1.1为SSL 3.2,TLS 1.2为SSL 3.3。如今习惯将这个两个组合在一块儿称为SSL/TLS,只要知道它是一种用于加密的安全协议就行了。浏览器

当网页指望用户提交机密数据(包括我的信息,密码或信用卡详细信息)时,网页应使用加密,这个时候web服务器就应该使用HTTPS协议来传输数据,它其实就是HTTP和SSL/TLS结合实现的;一样的还有SMTPS,它是加密的简单邮件通讯协议,这样在传输邮件的时候就不是明文传输了,通常咱们在设置邮箱服务器的时候能够选择是否勾选SSL/TLS的,若是没有勾选的话邮件就是明文传输了。安全

SSL/TLS有什么做用?

这里参考了网上的一些观点: 不使用SSL/TLS的HTTP通讯,就是不加密的通讯。全部信息明文传播,带来了三大风险。服务器

  • 窃听风险(eavesdropping):第三方能够获知通讯内容。
  • 篡改风险(tampering):第三方能够修改通讯内容。
  • 冒充风险(pretending):第三方能够冒充他人身份参与通讯。

SSL/TLS协议是为了解决这三大风险而设计的,但愿达到session

  • 全部信息都是加密传播,第三方没法窃听。
  • 具备校验机制,一旦被篡改,通讯双方会马上发现。
  • 配备身份证书,防止身份被冒充。

SSL证书

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

在讲SSL/TLS的工做流程以前,先要说明一下SSL证书这个东西,来思考一个问题: 基本思路里面的公钥加密法,如何保证公钥不被篡改?答案是:将公钥放在数字证书中。只要证书是可信的,公钥就是可信的。学习

那SSL证书是什么?怎么保证它是可信任的? SSL 证书就是遵照 SSL协议,由受信任的数字证书颁发机构CA,在验证服务器身份后颁发,具备服务器身份验证和数据传输加密功能。 怎么才能申请到SSL证书?或者说影响该证书申请的因素有哪些? 影响证书的因素:申请中提到的企业/公司是否有合法身份以及申请人是否控制证书​​中提到的域名。网站

申请到证书的步骤是怎么样的?加密

  1. 制做CSR文件 CSR就是Certificate Signing Request证书请求文件。这个文件是由申请人制做,在制做的同时,系统会产生2个密钥,一个是公钥就是这个CSR文件,另一个是私钥,存放在服务器上。要制做CSR文件,申请人能够参考WEB SERVER的文档,通常APACHE等,使用OPENSSL命令行来生成KEY+CSR2个文件。
  2. CA认证 域名认证,通常经过对管理员邮箱认证的方式,这种方式认证速度快,可是签发的证书中没有企业的名称; 企业文档认证,须要提供企业的营业执照。通常须要3-5个工做日。 也有须要同时认证以上2种方式的证书,叫EV证书,这种证书可使IE7以上的浏览器地址栏变成绿色,因此认证也最严格。
  3. 证书的安装 在收到CA的证书后,能够将证书部署上服务器,通常APACHE文件直接将KEY+CER复制到文件上,而后修改HTTPD.CONF文件。

注意:证书分为单域证书、通配符证书、多域证书、扩展验证证书,申请证书的时候要看是申请那一类了。

证书在什么状况下被使用?是怎么使用的?

  1. 咱们在点击web站点的时候,好比输入https://www.domain.com ,进行dns解析后web服务器进行响应,web服务器自动传送https://www.domain.com 网站的数字证书给用户,上文说到了,证书是安装在web服务器里面的,证书里面含有公钥,因此这里至关于服务器把公钥传递给了客户端,固然服务器那里还有本身的私钥,具体过程以下图。
    image
  2. 客户端是使用浏览器进行操做的,不一样版本的浏览器自动产生40位或128位的会话密钥,用于对交易的信息进行加密,也就是说客户向服务器索要公钥后还要与服务器协商生成一个“会话秘钥”。 以下图,第三步获取到crt证书后,须要检验证书是否有效,若是无效则会显示警告信息,有效则生成一个随机数,即会话密钥,这个会话密钥再使用crt里面的公钥加密后传输给web服务器,服务器使用本身的私钥进行解密,获取浏览器生成的随机“会话密钥”,如今客户端服务器都知道这个“会话密钥”了,后续通讯都用这个会话密钥进行加密通讯了。
    image

SSL是怎么工做的?

简单归纳就是:

  1. 客户端向服务器端索要并验证公钥。
  2. 双方协商生成"对话密钥"。
  3. 双方采用"对话密钥"进行加密通讯。 具体是怎么协商生成“会话密钥”的,上文提到了,这里还有一个疑问,为何不直接使用crt证书里面的公钥进行加密,再使用服务器里面的私钥进行解密呢?更况且服务器里面的私钥也能够进行加密,crt里面的证书再进行解密便可。 缘由为:每一次对话(session),客户端和服务器端都生成一个"会话密钥"(session key),用它来加密信息。因为"对话密钥"是对称加密,因此运算速度很是快,而服务器公钥加密是非对称加密,比较耗时间,因此证书里面的公钥只用于加密"会话密钥"自己,这样就减小了加密运算的消耗时间。

那么会话密钥和公钥有什么区别呢?

  1. 会话加密是对称加密,服务器和客户端协商后生产一个会话密钥,因此服务器和客户端是共享一个相同的密钥的,固然不是服务器和全部客户端共享一个相同的密钥,而是每一个客户端都有本身的密钥,比较这个会话密钥是客户端(浏览器)随机生成的,因此服务器须要维护多个密钥。
  2. 公钥是采用的非对称加密,服务器把证书(公钥)下发给每一个用户正在使用的客户端(浏览器),因此是客户端共享公钥,服务器只掌控私钥,服务端与客户端密钥是一个1对多的关系,客户端发送的加密信息只能服务端解密,安全级别也更高,可是因为非对称加密太慢了,才采用了不一样客户端不一样密钥的“会话密钥”来解决这个问题。

具体TLS/SSL里面涉及到的非对称加密和对称加密的区别以及算法以下图所示:

image

总的来讲,客户端(浏览器)与web服务器进入加密通讯,就彻底是使用普通的HTTP协议,只不过用"会话密钥"加密内容,会话密钥即图中的随机数。

结束语

对SSL/TLS涉及到的底层原理作了一个大概的说明,对学习过程当中遇到的一些问题作了理解和解答,把一些问题理清楚后,对概念的理解就更加深入了,好比明白了某个技术的由来背景,为何会出现这个东西,问题的初衷是什么?怎么实现的?有哪些应用场景,若是把这些都调查清楚,那不管是对这个技术的使用仍是新技术的创新都是有好处了,比只会用这个东西来作一些事情局限于表面工程要好得多,以前听大佬讲,有的人工做了6,7年,比别人刚毕业处理工做1,2年写出来的文章还要屎,听后感受均可怕和悲哀,好好沉淀下去,打好基础,哪怕是寒冬来了也就不慌了,后续有时间再研究一下SSL证书申请的具体事宜。

相关文章
相关标签/搜索