ssl访问的原理

     总体交互流程如下

     1. 客户端发起HTTPS请求

  这个没什么好说的,就是用户在浏览器里输入一个https网址,然后连接到server的443端口。

  2. 服务端的配置

  采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面(startssl就是个不错的选择,有1年的免费服务)。这套证书其实就是一对公钥和私钥。如果对公钥和私钥不太理解,可以想象成一把钥匙和一个锁头,只是全世界只有你一个人有这把钥匙,你可以把锁头给别人,别人可以用这个锁把重要的东西锁起来,然后发给你,因为只有你一个人有这把钥匙,所以只有你才能看到被这把锁锁起来的东西。

  3. 传送证书

  这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间等等。

  4. 客户端解析证书

  这部分工作是有客户端的TLS来完成的。

  客户端(以 IE 浏览器为例,单击“工具”——“Internet 选项”——“内容”选项卡——单击“证书”)的"证书管理器",有"受信任的根证书颁发机构"列表。客户端会根据这张列表,查看解开数字证书的公钥是否在列表之内。

  首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随机值。然后用证书对该随机值进行加密。就好像上面说的,把随机值用锁头锁起来,这样除非有钥匙,不然看不到被锁住的内容。

  5. 传送加密信息

  这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了。

  6. 服务段解密信息

  服务端用私钥解密后,得到了客户端传过来的随机值(私钥),然后把内容通过该值进行对称加密(解说:正式的交互数据使用对称加密,非对称加密性能差)。所谓对称加密就是,将信息和私钥通过某种算法混合在一起,这样除非知道私钥,不然无法获取内容,而正好客户端和服务端都知道这个私钥,所以只要加密算法够彪悍,私钥够复杂,数据就够安全。

  7. 传输加密后的信息

  这部分信息是服务段用私钥加密后的信息,可以在客户端被还原。

  8. 客户端解密信息

  客户端用之前生成的私钥解密服务段传过来的信息,于是获取了解密后的内容。整个过程第三方即使监听到了数据,也束手无策。

几个关键的背景概念

1)数字签名主要是为了证明发件人身份。情景再现如下:

  Alice与Bob互换公钥。
  Alice用自己的私钥对TXT文件进行数字签名。
  Alice用Bob的公钥对TXT文件进行加密。
  Alice把经过数字签名和加密的文件TXT,通过邮件或其他传输途径,如QQ、MSN等)传给Bob。
  Bob在收到签名并加密的邮件后首先用Bob自己的私钥进行文件加密的解密,然后再用Alice的公钥进行数字签名解密。
  同样,在这个过程中Cinda也可以获取Bob、Alice的公钥和签名并加密的标书文件TXT。同时因无Bob的私钥而无法打开邮件。同时由于Alice在发送文件前已用自己的私钥进行了数字签名,所以当Bob在收到邮件后完全可以证实自己收到的就是Alice发来的邮件,而不可能是其他用户的。试想如果Cinda非法用户想要改变邮件,冒充Alice向Bob发送邮件,因Cinda没有Alice的私钥,所以在用其他用户的私钥进行数字签名时就不可能再以Alice的公钥来解密数字签名了。
  在这里要注意文件加密和数字签名的先后顺序,一定是先签名再加密,这样加密技术就可以同时保证邮件中的数字签名了。如果先加密,而后签名,非法用户在得到邮件后就可通过获取的公钥破解数字签名了,因为公钥是可以公开的,很容易被一些别有用心的人得到。数字签名破解后很可能签名被替换。当然邮件中的内容在没有收件人私钥的情况下还是无法打开的。

2)证书的起源——这里也通过一个情景来展现

  鲍勃有两把钥匙,一把是公钥,另一把是私钥。

  鲍勃把公钥送给他的朋友们----帕蒂、道格、苏珊----每人一把。

  苏珊要给鲍勃写一封保密的信。她写完后用鲍勃的公钥加密,就可以达到保密的效果。

  鲍勃收信后,用私钥解密,就看到了信件内容。这里要强调的是,只要鲍勃的私钥不泄露,这封信就是安全的,即使落在别人手里,也无法解密。

  鲍勃给苏珊回信,决定采用"数字签名"。他写完后先用 Hash 函数,生成信件的摘要(digest)。

  然后,鲍勃使用私钥,对这个摘要加密,生成"数字签名"(signature)。

  鲍勃将这个签名,附在信件下面,一起发给苏珊。

  苏珊收信后,取下数字签名,用鲍勃的公钥解密,得到信件的摘要。由此证明,这封信确实是鲍勃发出的。

  苏珊再对信件本身使用 Hash 函数,将得到的结果,与上一步得到的摘要进行对比。如果两者一致,就证明这封信未被修改过。

  复杂的情况出现了。道格想欺骗苏珊,他偷偷使用了苏珊的电脑,用自己的公钥换走了鲍勃的公钥。此时,苏珊实际拥有的是道格的公钥,但是还以为这是鲍勃
的公钥。因此,道格就可以冒充鲍勃,用自己的私钥做成"数字签名",写信给苏珊,让苏珊用假的鲍勃公钥进行解密。

  后来,苏珊感觉不对劲,发现自己无法确定公钥是否真的属于鲍勃。她想到了一个办法,要求鲍勃去找"证书中心"(certificate authority,简称 CA),为公
钥做认证。证书中心用自己的私钥,对鲍勃的公钥和一些相关信息一起加密,生成"数字证书"(Digital Certificate)。

  鲍勃拿到数字证书以后,就可以放心了。以后再给苏珊写信,只要在签名的同时,再附上数字证书就行了。

  苏珊收信后,用 CA 的公钥解开数字证书,就可以拿到鲍勃真实的公钥了,然后就能证明"数字签名"是否真的是鲍勃签的。

附件:一个较详细的实现流解析

http://www.fenesky.com/blog/2014/07/19/how-https-works.html

时间: 2024-10-11 12:03:15

ssl访问的原理的相关文章

[转帖]SSL/TLS/WTLS原理

SSL/TLS/WTLS原理 作者:yawl < [email protected] >主页:http://www.nsfocus.com日期:2001-02-19 一 前言 首先要澄清一下名字的混淆:1 SSL(Secure Socket Layer)是netscape公司设计的主要用于web的安全传输协议.这种协议在WEB上获得了广泛的应用.2 IETF(www.ietf.org)将SSL作了标准化,即RFC2246,并将其称为TLS(Transport Layer Security),从

oracle的环境配置-监听服务和访问连接原理

监听服务和访问连接原理 端口号范围:1025~6500 [[email protected] ~]$ lsnrctl   --进入监听管理工具 LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 05-JUN-2014 11:13:20 Copyright (c) 1991, 2005, Oracle.  All rights reserved. Welcome to LSNRCTL, type "help" for inform

Java1.7 SSL访问Https occur SSLProtocolException and CertificateException

最近在调用微信公众平台高级群发接口之一: https://file.api.weixin.qq.com/cgi-bin/media/uploadvideo?access_token=ACCESS_TOKEN 时,https访问抛出异常: javax.net.ssl.SSLProtocolException: handshake alert: unrecognized_name 异常中出现关键字:unrecognized 未被承认的name. google之,处理办法,代码加入: //bug fi

ACL控制访问列表原理+实验

ACL控制访问列表原理+实验1.原理:ACL使用包过滤技术,在路由器上读取ISO七层模型的第三层及第四层包头中的信息,如源地址,目的地址,源端口,目的端口等,根据预先定义好的规则,对包头进行过滤.2.从上到下逐条匹配,一旦匹配则停止匹配,一条不匹配,执行隐含(拒绝)命令.3.原则上ACL控制访问列表设置在进端口效率更高4.ACL的类型有三类:A.标准ACL,根据数据包的源IP地址来允许或拒绝转发数据包,列表号(1-99)B.扩展ACL,根据数据包的源IP地址,目的IP地址,指定协议,端口和标志来

HTTPS详解二:SSL / TLS 工作原理和详细握手过程

HTTPS 详解一:附带最精美详尽的 HTTPS 原理图 HTTPS详解二:SSL / TLS 工作原理和详细握手过程 在上篇文章HTTPS详解一中,我已经为大家介绍了 HTTPS 的详细原理和通信流程,但总感觉少了点什么,应该是少了对安全层的针对性介绍,那么这篇文章就算是对HTTPS 详解一的补充吧.还记得这张图吧. HTTPS 和 HTTP的区别 显然,HTTPS 相比 HTTP最大的不同就是多了一层 SSL (Secure Sockets Layer 安全套接层)或 TLS (Transp

SSL/TLS/WTLS原理(密钥协商的形象化比喻:用服务器的公钥协商加密格式,然后再加密具体的消息)good

一 前言 首先要澄清一下名字的混淆: 1 SSL(Secure Socket Layer)是netscape公司设计的主要用于web的安全传输协议.这种协议在WEB上获得了广泛的应用. 2 IETF(www.ietf.org)将SSL作了标准化,即RFC2246,并将其称为TLS(Transport Layer Security),从技术上讲,TLS1.0与SSL3.0的差别非常微小.由于本文中没有涉及两者间的细小差别,本文中这两个名字等价. 3 在WAP的环境下,由于手机及手持设备的处理和存储

python SSL访问网站代码

经常遇到要用Python访问SSL网站,这是一个简单的代码,几行就搞定了! import socket import ssl sock = ssl.wrap_socket(socket.socket()) sock.connect(('www.test.com', 443))#其中www.test.com要访问的网站 data = 'xxxxx'#data为要发送的数据 sock.sendall(data)recv_data = sock.recv(8192) sock.close() prin

SSL/TLS的原理以及互联网究竟是如何工作的(1) —“每个协议生而平等”

计算机网络里有一个模型非常有名:OSI(Open Systems Interconnection,开放系统互连)模型,几乎所有的计算机网络教学和科研都要在OSI的基础上进行,想要讨论计算机网络中的问题也要依靠这个模型. OSI模型是这样的结构(从底层到最高层): 1,物理层(physical layer) 物理层负责最后将信息编码成电流脉冲或其它信号用于网上传输.它由计算机和网络介质之间的实际界面组成,可定义电气信号.符号.线的状态和时钟要求.数据编码和数据传输用的连接器.有线网络信号有电流脉冲

nginx服务器启用SSL访问

HTTP和HTTPS的区别 https协议需要到ca申请证书,一般免费证书很少,需要交费. http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议. http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443. http的连接很简单,是无状态的:HTTPS协议是由SSL+HTTP协议构建的可进行加密传输.身份认证的网络协议,比http协议安全. 所以在涉及到账户.金钱等敏感信息交互的时候使用HTTPS是个不错的选择. 申请证书 申