---
# System prepended metadata

title: HTTP HTTPS TLS/SSL
tags: [觀念重點區]

---

#  HTTP HTTPS TLS/SSL
https://www.youtube.com/watch?v=9a1x_uRzy2Q

https://jeanboy.blog.csdn.net/article/details/76423436
https://www.youtube.com/watch?v=W9r3n2DFD64

https://nordvpn.com/zh-tw/blog/ssl-tls-bijiao/

HTTP超文本傳輸協定

超文本 
是一個文本
但他是超文本
所以是文本加上一些影片圖片等

傳輸 是互通的 是應答也是請求方

協定是雙方要遵守的

但HTTP是明文

經過加密就變成HTTPS 


加密有公鑰跟私鑰

https 必看
https://www.youtube.com/watch?v=67kItGjvRs0&ab_channel=ByteByteGo


![image](https://hackmd.io/_uploads/ryjO6sDP6.png)
其他非對稱都這樣做
先加密（摘要） 在簽名 

單雙向
https://zhuanlan.zhihu.com/p/330393659
##
redis mysql

![image](https://hackmd.io/_uploads/ry7F9hmo6.png)
https://www.quanzhan.co/archives/572

## range
https://mp.weixin.qq.com/s?__biz=Mzg3OTYzMDkzMg==&mid=2247495472&idx=1&sn=bc73cba1c6a4075dddddc88fe270772b&chksm=cf03200bf874a91d3b

## chuck
https://juejin.cn/post/7233196954402439226

## 基本知識
![image](https://hackmd.io/_uploads/ByQvMzIcp.png)
![image](https://hackmd.io/_uploads/H1w5GGLqT.png)
![image](https://hackmd.io/_uploads/Bk2qzMIcT.png)


## http
https://www.ruanyifeng.com/blog/2016/08/http.html

## http2
https://halfrost.com/http2-http-frames/

##  HTTP Keep-Alive and Websockets?
https://stackoverflow.com/questions/7620620/whats-the-behavioral-difference-between-http-keep-alive-and-websockets

## 流程
![image](https://hackmd.io/_uploads/HJnXChwvT.png)
![image](https://hackmd.io/_uploads/B1CHAhvv6.png)

所以先用hash(摘要) 對key 做簽名 然後當key沒問題後
之後連線都是用加密方式


![image](https://hackmd.io/_uploads/H1ZhA3vPT.png)


## HTTP 状态码

```
 1.  状态码分类  
         - 1xx：信息，服务器收到请求，需要请求者继续操作
         - 2xx：成功
         - 3xx：重定向
         - 4xx：客户端错误
         - 5xx：服务端错误

 2. 常用状态码

     200：请求成功
     301：永久重定向
     302：临时移动
     400 bad request：客户端请求语法错误
     401 unauthorized：客户端没有权限
     403 forbidden：服务器拒绝客户端请求
     404 not found：客户端请求资源不存在
     500 Internal Server Eerro：服务器内部错误
     502 bad gateway：作为网关或者代理工作的服务器尝试执行请求时，从上游服务器接收到无效的响应
     503 Service Unavailable 超载或系统维护
     504 Gateway timeout：网关超时

 3. 502 的原因及解决方法
     原因：nginx将请求提交给网关（php-fpm）处理异常导致
         1. fastcgi 缓冲区设置过小
             fastcgi_buffers 8 16k;
              fastcgi_buffer_size 32k;
         2. php-cgi的进程数设置过少
             查看FastCgi进程数：netstat -anpo | grep "php-cgi"| wc -l
             调整参数最大子进程数：max_children
                 一般按照单个进程20M计算需要需要设置的子进程数 
         3. max_requests（内存溢出或频繁重启）
             参数指明每个children最多能处理的请求数量，到达最大值之后会重启children。
             设置过小可能导致频繁重启children：
                 php将请求轮询给每个children，在大流量的场景下，每一个children 到达最大值的时间差不多，如果设置过小可能多个children 在同一时间关闭，nginx无法将请求转发给php-fpm，cpu降低，负载变高。
             设置过大可能导致内存泄露
         4. php执行时间超过nginx等待时间
                 fastcgi_connect_timeout
                 fastcgi_send_timeout
                 fastcgi_read_timeout
         5. fastcgi执行时间
             max_execution_time
```
## 簡單介紹
現在協議都是TLS   SSL已經過了

## 詳細介紹
HTTP 是建立在 TCP 协议之上，所以 HTTP 协议的瓶颈及其优化技巧都是基于 TCP 协议本身的特性。


**HTTP 的缺点**
通信使用明文（不加密），内容可能会被窃听
不验证通信方的身份，因此有可能遭遇伪装
无法证明报文的完整性，所以有可能已遭篡改

## HTTPS 的诞生
为了解决 HTTP 协议的以上缺点，在上世纪90年代中期，由网景（NetScape）公司设计了 SSL 协议。SSL 是“Secure Sockets Layer”的缩写，中文叫做“安全套接层”。.

![](https://i.imgur.com/8Pz5ndK.png)
## 加密做法
https://www.youtube.com/watch?v=2JYT5f2isg4

## 加密
“对称加密”与“非对称加密”
明文传输消息


“加密”和“解密”
通俗而言，你可以把“加密”和“解密”理解为某种【互逆的】数学运算。就好比“加法和减法”互为逆运算、“乘法和除法”互为逆运算。
“加密”的过程，就是把“明文”变成“密文”的过程；反之，“解密”的过程，就是把“密文”变为“明文”。在这两个过程中，都需要一个关键的东西——叫做“密钥”——来参与数学运算。

“对称加密”
![](https://i.imgur.com/b7R9lsi.png)


所谓的“对称加密技术”，意思就是说：“加密”和“解密”使用【相同的】密钥。这个比较好理解。就好比你用 7zip 或 WinRAR 创建一个带密码（口令）的加密压缩包。当你下次要把这个压缩文件解开的时候，你需要输入【同样的】密码。在这个例子中，密码/口令就如同刚才说的“密钥”。

存在疑问：密钥怎么传输？
如果密钥可以安全的传输，那么消息也应该可以安全的传输，就像蛋生鸡，鸡生蛋一样。

“非对称加密”
![](https://i.imgur.com/Eqjd8BX.png)


所谓的“非对称加密技术”，意思就是说：“加密”和“解密”使用【不同的】密钥。当年“非对称加密”的发明，还被誉为“密码学”历史上的一次革命。

被劫持情况：
![](https://i.imgur.com/X4oz3JQ.png)


窃听者可以伪造服务器的公钥与客户端通讯，客户端以为是跟服务器通讯，其实是与窃听者在通讯，后果可想而知。

## CA 证书
CA 是 PKI 系统中通信双方信任的实体，被称为可信第三方（Trusted Third Party，简称TTP）。　CA 证书，顾名思义，就是 CA 颁发的证书。

CA 的初始是为了解决上面非对称加密被劫持的情况，服务器申请 CA 证书时将服务器的“公钥”提供给 CA，CA 使用自己的“私钥”将“服务器的公钥”加密后（即：CA证书）返回给服务器，服务器再将“CA 证书”提供给客户端。一般系统或者浏览器会内置 CA 的根证书（公钥）
![](https://i.imgur.com/CgjPGCe.png)


## SSL
SSL/TLS 加密可分為兩個階段：SSL/TLS 握手協議（SSL handshake）和 SSL/TLS 紀錄層，
https://www.youtube.com/watch?v=-f4Gbk-U758

### SSL 握手協議
1. SSL 握手是客戶端和伺服器之間的一種通訊形式。在這種通訊形式中，客戶端和伺服器會決定如何進行進一步的通訊。以下是 SSL 握手的方式：
1. 客戶端發出「hello」請求，並將客戶端支援的 SSL 版本和加密演算法發送給網頁伺服器。
1. 伺服器收到客戶端的「hello」請求，然後伺服器回傳「hello」到客戶端，並傳送 SSL 證書和公鑰，這裡的客戶端和伺服器用非對稱加密來交換安全資訊。這表示客戶端需要伺服器的公鑰來加密訊息，而伺服器需要公鑰和私鑰來解密訊息。任何窺探流量的人都無法破解傳輸的加密訊息。
1. 然後，客戶端使用伺服器的公鑰建造 pre-master secret，這是一個亂數，並將其發送到伺服器，以建造對話金鑰（session key），這會將通訊提升為對稱加密。目前這兩端只使用私鑰，對稱加密讓通訊速度更快，而且使用更少的資源。
1. 伺服器解密 pre-master secret，使用它建立金鑰並與客戶端交換。藉由對稱加密的建立，雙方現在可以交換加密訊息，網站的傳輸是安全的。


### SSL/TLS 紀錄層
這個階段會傳輸加密資料，數據從用戶應用程式發送並加密。根據加密演算法的不同，數據可能會被壓縮。然後加密訊息會被發送到網路傳輸層，該層會決定如何將數據發送到目標設備。




###### tags: `觀念重點區`


