按照网上的参考,根据自己的理解思维进行整理,持续更新。
HTTPS科普扫盲帖
讲的比较通俗易懂,参考着先看下。
HTTPS实际就是:数据通讯前验证对方密钥确保安全,随后http报文经过ssl加密处理进行的http通讯
,结构如下:
HTTP
↓
SSL
↓
TCP
↓
IP
↓
数据链路层
↓
物理层
OSI模型那一套东西。
所以要了解https,要先了解http,再了解ssl如何验证密钥,怎么把数据加密。
了解http,建议看David.Gourley的《HTTP权威指南》
,讲的很详细且易懂。
默认支持的编码为ISO-8859-1,如果数据中含有非该编码的字符,就需要进行url编码,
该标准包含了
ASCII字符集(1-127)
标准 ISO 字符集
希腊字母、其他符号(160-255)
Certificate Authority,即颁发数字证书的机构,与SSL密切相关的就是CA证书了。
CA中心为每个使用公开密钥的用户发放一个数字证书,数字证书的作用是证明证书中列出的用户合法拥有证书中列出的公开密钥。
CA 也拥有一个证书(内含公钥)和私钥。网上的公众用户通过验证 CA 的签字从而信任 CA ,任何人都可以得到 CA 的证书(含公钥),用以验证它所签发的证书。
如果用户想得到一份属于自己的证书,他应先向 CA 提出申请。在 CA 判明申请者的身份后,便为他分配一个公钥,并且 CA 将该公钥与申请者的身份信息绑在一起,并为之签字后,便形成证书发给申请者。
如果一个用户想鉴别另一个证书的真伪,他就用 CA 的公钥对那个证书上的签字进行验证,一旦验证通过,该证书就被认为是有效的。
指的是CA数字证书的标准,还有其他标准:
符合PKI ITU-T X509标准,传统标准(.DER .PEM .CER .CRT)
符合PKCS#7 加密消息语法标准(.P7B .P7C .SPC .P7R)
符合PKCS#10 证书请求标准(.p10)
符合PKCS#12 个人信息交换标准(.pfx *.p12)
X509是数字证书的基本规范,而P7和P12则是两个实现规范,P7用于数字信封,P12则是带有私钥的证书实现规范。
具体这边讲的比较详细:数字证书常见格式整理
一个标准的X.509数字证书包含以下一些内容:
1、证书的版本信息;
2、证书的序列号,每个证书都有一个唯一的证书序列号;
3、证书所使用的签名算法;
4、证书的发行机构名称,命名规则一般采用X.500格式;
5、证书的有效期,通用的证书一般采用UTC时间格式;
6、证书所有人的名称,命名规则一般采用X.500格式;
7、证书所有人的公开密钥;
8、证书发行者对证书的签名。
客户端需要有个客户端证书以及CA证书
客户端证书给服务器验证客户端合法性
CA证书用来认证服务器证书合法性
如果是嵌入式设备,那么证书申请方就要给嵌入式设备内置客户端证书和CA证书
参考了这篇文章对称密钥算法与非对称密钥算法
国密算法
可分为对称算法和非对称算法
对称算法,包括了SM1,SM4,SM7,祖冲之密码(zuc),SM1和SM7对外是不公开的,想要调用的话,需要通过加密芯片的接口才可以
非对称算法,包括SM2,SM9,SM3(哈希算法)
加密和解密使用相同密钥的算法。(加密Key=解密key)
对称密钥算法又分为分组密码 (Block Cipher)和流密码(Stream Cipher)。
常用算法包括
DES (Data Encryption Standard,数据加密算法)
3DES (Triple Data Encryption Algorithm,三重数据加密算法)
AES (Advanced Encryption Standard,高级加密标准,又称Rijndael加密法)
PBE (Password-based encryption,基于密码验证)
RC2、RC4、RC5(来自Rivest Cipher 4的缩写)
SM1、SM4、SM7、祖冲之密码(zuc)(都是国密算法)
优点:加密速度快,便于硬件实现和大规模生产
缺点:需要保障密钥安全;无法用来签名和抗抵赖;
非对称密码体制也叫公开密钥密码体制、双密钥密码体制。
其原理是加密密钥与解密密钥不同,形成一个密钥对,用其中一个密钥加密的结果,可以用另一个密钥来解密 。
特点:加密和解密使用不同的密钥;一个密钥公开,称公钥;一个密钥保密,称私钥
常用算法:
RSA、Elgamal、Elgamal(离散对数)、Rabin、D-H、ECC(椭圆曲线加密算法),
还有国密算法(SM2,SM9,SM3(哈希算法))
使用最广泛的是RSA算法,Elgamal是另一种常用的非对称加密算法。
优点:密钥分配,不必保持信道的保密性 ;可以用来签名和防抵赖
HASH算法:MD5,SHA1,SHA256
参考了https 证书传递、验证和数据加密、解密过程解析
由两部分组成:http + SSL / TLS,也就是在http上又加了一层处理加密信息的模块。
TLS(传输层安全)是更为安全的升级版 SSL,可以说TLS就是SSL的新版本3.1。
由于 SSL 这一术语更为常用,因此我们仍然将我们的安全证书称作 SSL。
但当您从赛门铁克购买 SSL 时,您真正购买的是最新的 TLS 证书,有 ECC、RSA 或 DSA 三种加密方式可以选择。
服务端和客户端的信息传输都会通过TLS进行加密,所以传输的数据都是加密后的数据。
1.客户端发起https请求
客户端向服务端发起HTTPS请求,客户端给出协议版本号、一个客户端随机数A(Client random)以及客户端支持的加密方式(SSL/TLS信息),连接到服务端的443端口,Http则是80端口。
2. 传送证书
服务端确认双方使用的加密方式,并给出数字证书,这个数字证书其实就是公钥,只是包含了很多信息,如证书的颁发机构、拥有者和证书过期时间等等。
服务器端的配置
采用https协议的服务器必须要有一套SSL数字证书,需要向CA组织(如WoSign沃通CA)申请。
这套SSL证书其实就是一对公钥和私钥。
如果对公钥和私钥不太理解,可以想象成一把钥匙和一个锁头。
只是全世界只有你一个人有这把钥匙,你可以把锁头给别人,别人可以用这个锁把重要的东西锁起来,然后发给你。
因为只有你一个人有这把钥匙,所以只有你才能看到被这把锁锁起来的东西。
SSL证书是网站实现https加密协议的先决条件,可以向CA机构申请免费SSL证书。
也可以付费购买高级别的SSL证书。目前沃通CA提供3年期免费SSL证书申请http://freessl.wosign.com。
3. 客户端解析证书
这部分工作是由客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就通过对称加密算法,如SM4,生成对话秘钥。然后用证书公钥对该对话秘钥进行加密。就好像上面说的,把对话秘钥用锁头锁起来,这样除非有钥匙,不然看不到被锁住的内容。
4. 传送加密信息
这部分传送的是用服务端的SSL证书加密后的对话秘钥,目的就是让服务端得到这个对话秘钥,以后客户端和服务端的通信就可以通过这个对话秘钥来进行加密解密了。
5. 服务段解密信息
服务端用私钥解密后,得到了客户端传过来的对话秘钥,然后把内容通过该值进行对称加密。所谓对称加密就是,将信息和私钥通过某种算法(比如国密SM4算法)混合在一起,这样除非知道私钥,不然无法获取内容,而正好客户端和服务端都知道这个私钥,所以只要加密算法够彪悍,私钥够复杂,数据就够安全。
6. 传输加密后的信息
这部分信息是服务端用对话秘钥加密后的信息,可以在客户端被还原。
7. 客户端解密信息
客户端用之前生成的私钥解密服务段传过来的信息,于是获取了解密后的内容。整个过程第三方即使监听到了数据,也束手无策。
SSL介于应用层和TCP层之间。应用层数据不再直接传递给传输层,而是传递给SSL层,SSL层对从应用层收到的数据进行加密,并增加自己的SSL头。
在客户机和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和 POST。
GET: 从指定的资源请求数据。
POST: 向指定的资源提交要被处理的数据
http报文都是由起始行(start line)
+首部(header)
+主体(body,可选)
组成。
起始行
:主要就是描述数据请求方式、地址和版本。
首部
:包括通用首部、请求首部、响应首部、实体首部、扩展首部
5种类型。
主体
:真正要处理的数据,主要和首部结合,首部中的实体首部
+主体
组成了报文中最重要的数据实体
,实体首部描述了主体的编码方式,比如:
HTTP/1.0 200 OK //起始行
Date: Thu, 11 Jul 2015 15:33:24 GMT //首部,通用首部
Content-type: text/plain //首部,实体首部,说明实体属性,比如可以是application/json
Content-length: 19
//CRLF 空行
hi, i'm a message. //主体,实体主体
种类分为两类:请求报文(request message)和响应报文(response message);
两个报文只有起始行不一样,但都是起始行+首部+实体
结构,具体如下:
1 | 请求报文 | 响应报文 |
---|---|---|
起始行 |
|
|
首部 | keyn: valuen\r\n // n个key和n个value组成,可以有0个或多个 |
keyn: valuen\r\n // n个key和n个value组成,可以有0个或多个 |
空行 | \r\n |
\r\n |
主体 |
|
|
method:客户端希望服务器对资源执行的操作,主要有以下几种方式:
GET、HEAD、POST
(HTTP1.0)
OPTIONS、PUT、 DELETE、TRACE和CONNECT(HTTP1.1)
request-URL:所请求资源的路径。
version:报文所使用的http版本,格式为:HTTP/
,如:HTTP/1.1
。
headers:由0个或多个首部组成:key:[空格]value,到空行结束,首部主要有五种类型:
通用首部
、请求首部
、响应首部
、实体首部
、扩展首部
entity-body:由任意数据组成的数据块,并不是必须要有的字段。
status:状态码,成功、出错等错误码提示:
100~199,信息提示
200~299,成功
300~399,资源已被移走,重定向
400~499,客户端请求出错
500~599,服务器出错
reason-phase:status的可读状态,status是数字,不直观,这边显示OK或NOT OK等字符,直观显示。
请求报文:举个POST用 json 的例子:
POST http://www.example.com HTTP/1.1
Content-Type: application/json; charset=utf-8
{"title":"test","sub":[1,2,3]}
响应报文:
HTTP/1.0 200 OK //起始行
Content-type: text/plain //首部
Content-length: 19
//CRLF 空行
hi, i'm a message. //主体
实体由实体首部
+实体主体
组成。
实体首部
,是http报文的首部(headers)的一部分。
实体主体
,就是主体(body),是实际传输处理的数据,主体可以有很多种格式。这个格式也可以称作MIME类型(用来描述报文主体内容的一些标准化名称,通常用Content-type:
来定义),常见的有以下几种:
Content-type: text/html:HTML 格式的文本文档
Content-type: text/plain:普通的 ASCII 文本文档
Content-type: image/jpeg:JPEG格式的图片
Content-type: image/gif:GIF格式的图片
Content-type: video/quicktime:Apple 的QuickTime 电影
Content-type: application/vnd.ms-powerpoint:微软的powerpoint文件
//POST提交数据的请求方式常用以下几种MIME类型
Content-type: application/x-www-form-urlencoded //默认使用
Content-type: application/json
Content-type: multipart/form-data //一般用来上传文件
详细MIME类型可以看这个博客园的文章《MIME类型集合》