# 1.6 HTTPS
## 1.6 HTTPS
HTTPS即HTTP over Transport Layer Security,亦称HTTP over SSL或HTTP Secure,简单说就是加密的HTTP。因为HTTP本身并不安全,通过它传输敏感信息(如用户密码等),很容易被传输路径上的第三者(如代理服务器等)截获而泄露,所以就有了HTTPS,用以加密传输。
启用HTTPS需要在服务器端做一些设置,包括购买/获得一个SSL证书(certificate)——它是服务器的身份证,有了它才能进行加密传输。
关于SSL证书需要注意的是:
- 证书由一个权威机构(Certificate Authority,简称CA)提供,并有一定时效(一般以年为单位),过期失效
- 证书提供一对密钥:公钥和私钥。服务器对外发布公钥以声明自己的身份,但私钥只有自己能读取,用来证实自己的身份(后祥)
浏览器在访问一个HTTPS站点时,首先通过一个“握手”(handshake)过程得到一个密钥(并非前述的公钥/私钥),然后通过这个密钥加密此后的HTTP传输。握手的过程如下(中间如有任何一步失败则握手失败):
1. 浏览器访问一个HTTPS站点,如<https://githuber.cn/>
2. 服务器返回一个证书,包含服务器的公钥
3. 浏览器通过CA验证证书的有效性
4. 浏览器生成一个随机的字符串做密钥,并用服务器的公钥加密它,然后把它发送给服务器
5. 服务器用私钥解密浏览器发来的加密密钥
6. 此后的通信开始使用这个密钥进行加/解密
另外:
- 用公钥加密的密文只有用私钥才能解开,这属于一种“非对称加密”方法
- 以上第6步中的密钥是一种“对称”密钥:使用同一把密钥进行加密和解密
更多关于HTTPS可参考:<https://en.wikipedia.org/wiki/HTTPS>
- 前言
- 1 Web概述
- 1.1 什么是Web
- 1.2 超文本和超链接
- 1.3 URL
- 1.4 DNS
- 1.5 HTTP
- 1.5.1 客户端请求
- 1.5.2 服务器应答
- 1.5.3 进一步了解HTTP
- 1.6 HTTPS
- 2 Web浏览器
- 2.1 HTML
- 2.1.1 文档类型声明
- 2.1.2 标签和属性
- 2.1.3 文档结构
- 2.1.4 DOM
- 2.1.5 进一步了解HTML
- 2.2 CSS
- 2.2.1 样式与样式表
- 2.2.2 样式表语法
- 2.2.3 级联样式表
- 2.2.4 进一步了解CSS
- 2.3 JavaScript
- 2.3.1 script标签
- 2.3.2 操纵DOM
- 2.3.3 jQuery
- 2.3.4 进一步了解JavaScript
- 2.4 Ajax
- 2.5 移动设备与响应式Web设计
- 3 Web服务器
- 3.1 方法与资源
- 3.2 状态代码
- 3.3 静态内容与动态内容
- 3.4 编程语言与技术
- 3.4.1 CGI
- 3.4.2 PHP
- 3.4.3 Java
- 3.4.4 Python
- 3.4.5 Ruby
- 3.4.6 Node.js
- 3.5 RESTful Web API
- 3.6 服务器架构
- 3.7 Web缓存
- 3.8 服务器推送
- 4 数据库
- 4.1 关系型数据库
- 4.2 NoSQL数据库
- 5 Web服务器的其他组件
- 5.1 Cron
- 5.2 消息队列
- 5.3 邮件服务器
- 6 开发工具与技术
- 6.1 Git
- 6.1.1 Git基础操作
- 6.1.2 Git基本原理
- 6.1.3 进一步了解Git
- 6.2 敏捷开发