阅读目录html
关于网络安全加密的介绍能够看以前文章:算法
1. 网络安全——数据的加密与签名,RSA介绍
2. Base64编码、MD五、SHA1-SHA5十二、HMAC(SHA1-SHA512)
3. When I see you again(DES、AES、RSA、Base6四、MD5加密原理介绍,代码实现)编程
HTTPS创建过程至关复杂,下图为示意图,能够有总体认识,通常咱们编程知道这些已足够。浏览器
若是你想仿照HTTPS实现相似加密,能够阅读下具体过程,做为参照缓存
能够看到,在客户端向服务器发起请求前,还有一些准备工做要作,或者说是有一些工做已经作好了。安全
https使用的是443端口,而http使用的是80端口服务器
TCP端口号是一个2字节的整型,处于TCP报文段的前四个字节(2字节源端口号,2字节目的端口号)。网络
很明显范围是0~65535。其中0~1023具备特殊意义,已经被绑定,好比上面说的443,80,还有ftp的21端口。从1024~49151也具备特殊含义,可是尚未被用完,好比8080端口重定向。剩下的咱们就能够随便使用,自定义了。session
其实以前在嵌入式开发中,没有链接外网,也没有使用浏览器等等这些。因此端口彻底自定义随便用,不用担忧冲突:)。dom
下面的过程为具体详细一点的过程,若是不想看,能够彻底只看示意图便可,对咱们平时开发用处并不大。或者你在用wireshark相似的抓包工具时看的抓狂不认识,能够看看(反正我用Charles抓包):
一样须要三次握手,创建TCP链接(毫无疑问HTTPS也是基于TCP的)
里面有1970年1月1日到如今的秒数,后面还有一个客户端发来的随机数Client.random
若是客户端与服务器费尽周折创建了一个HTTPS连接,刚建完就断了,也太惋惜,因此用Session ID将其保存,若是下次再来能够直接使用以前的连接进行对话(对称密钥)。
告诉服务器,本身支持的加密算法种类
服务器终于发来咱们想要的数字证书,包含了:签发机构、过时时间、主题名称、公共密钥信息、指纹信息等等
服务器发送结束
客户端从内置的CA根证书获取C.pub,对服务器发送来的数字证书进行验签,若是一致,说明证书是CA颁发的(前提是C.pub是真实的,确实是CA机构的公钥)。而后看看证书是否过时,域名是否匹配
客户端根据以前的:Client.random + sever.random + pre-master
生成对称密钥
通过S.pub加密发送给服务器,以后便可经过对称密钥进行通信。(就是以前咱们熟悉的http)
在整个过程当中,一共涉及2对公私密钥对,一对由服务器产生,主要用于加密,一对由CA产生,主要用于签名。
假设没有CA,那么若是服务器返回的包含公钥的包被hack截取,而后hack也生成一对公私钥,他将本身的公钥发给客户端。hack获得客户端数据后,解密,而后再经过服务器的公钥加密发给服务器,这样数据就被hack获取。
有了CA后,客户端根据内置的CA根证书,很容易识别出hack的公钥不合法,或者说hack的证书不合法。
from:http://www.cnblogs.com/mddblog/p/6948980.html