返回「计算机、信息技术与工程」

http与https

http与https HTTP(Hypertext Transfer Protocol,超文本传输协议)是用于在客户端(如浏览器)和服务器之间传输数据的应用层协议。它是万维网的基础,用于传输网页、图像、视频等资源。HTTP协议是无状态的,这意味着每个请求都是独立的,服务器不会自动记住之前的请求。

更多
Markdown 结构化数据
本文目录 15 个章节

http与https

HTTP(Hypertext Transfer Protocol,超文本传输协议)是用于在客户端(如浏览器)和服务器之间传输数据的应用层协议。它是万维网的基础,用于传输网页、图像、视频等资源。HTTP协议是无状态的,这意味着每个请求都是独立的,服务器不会自动记住之前的请求。

HTTP的原理

HTTP协议基于请求-响应模式。它的工作原理如下:

  1. 客户端发起请求:客户端(通常是浏览器)向服务器发送一个HTTP请求,请求的内容可能是网页、图片、文件等资源。请求分为几部分:
    • 请求行:包括请求方法(如GET、POST)、请求的资源路径以及HTTP版本。
    • 请求头:包含客户端的配置信息和请求的元数据(如用户代理、接受的内容类型、认证信息等)。
    • 请求体:在POST请求中,通常包含要发送到服务器的数据,如表单数据。
  2. 服务器处理请求:服务器接收到请求后,根据请求的内容执行相应的操作,比如读取文件、处理数据、查询数据库等。
  3. 服务器发送响应:服务器处理完请求后,将结果封装在HTTP响应中发回客户端。响应分为几部分:
    • 状态行:包含HTTP版本、状态码(如200 OK、404 Not Found)和状态描述。
    • 响应头:包含服务器信息、内容类型、缓存控制等。
    • 响应体:实际返回的内容,如HTML页面、图片、文件等。
  4. 客户端处理响应:客户端收到响应后,根据响应头的信息和响应体的内容进行相应的处理,如渲染网页、下载文件等。

HTTP的作用

HTTP协议的主要作用是为Web应用提供通信基础,它使得客户端和服务器能够通过标准化的方式交换信息。具体作用包括:

  • 资源访问:允许客户端访问服务器上的各种资源,如网页、图片、视频等。
  • 通信控制:通过HTTP头信息,控制缓存、认证、代理、内容协商等。
  • 状态管理:虽然HTTP本身是无状态的,但可以通过Cookie等机制进行状态管理,实现会话跟踪、用户认证等功能。

HTTP的用法

使用HTTP协议的基本步骤和方法如下:

  1. 使用浏览器:用户通过输入URL(如https://www.example.com)来访问网页,浏览器会自动构建HTTP请求并发送给服务器。
  2. 使用命令行工具:可以使用如curlwget等命令行工具手动构建并发送HTTP请求。例如:
curl -X GET https://www.example.com

HTTPS

HTTP(Hypertext Transfer Protocol)和 HTTPS(Hypertext Transfer Protocol Secure)都是用于在客户端(如浏览器)和服务器之间传输数据的协议。 HTTPS HTTP 的安全版本,使用了加密技术来保护数据的传输过程。

HTTPS 在 HTTP 的基础上增加了 SSL/TLS(安全套接字层/传输层安全协议)加密。使用 HTTPS 传输的数据是加密的,即使被截获,攻击者也无法轻易解密和读取。HTTPS 还可以验证服务器的身份,确保客户端连接到的是真正的服务器,而不是伪装的恶意服务器。

HTTPS需要数字证书(SSL 证书)来验证服务器的身份。这个证书由受信任的证书颁发机构(CA)签发。客户端(如浏览器)会验证服务器的证书,以确认连接的服务器是合法的。

HTTPS 的实现原理

  • 握手阶段
    • 客户端请求:客户端(如浏览器)向服务器发起连接请求,表明它希望使用 HTTPS 进行通信,并发送支持的加密算法列表。
    • 服务器响应:服务器选择一种加密算法,并将自己的数字证书发送给客户端。这个证书包含服务器的公钥和由证书颁发机构(CA)签名的服务器身份信息。
    • 验证证书:客户端使用内置的受信任的 CA 列表来验证服务器证书的合法性。如果证书可信,客户端生成一个随机的“会话密钥”(对称密钥),并使用服务器的公钥对该密钥进行加密,然后发送给服务器。
    • 服务器解密:服务器使用自己的私钥解密出客户端发送的“会话密钥”。从此,客户端和服务器使用这个对称密钥进行数据加密和解密。
  • 数据传输阶段
    • 在握手阶段结束后,客户端和服务器使用协商好的对称密钥进行数据的加密传输。所有的数据都通过对称加密算法进行加密,以确保在传输过程中无法被窃听或篡改。
  • 会话结束
    • 当会话结束时,客户端和服务器可以选择断开连接,并丢弃生成的对称密钥。下次通信需要重新进行握手和密钥协商。

如何配置 HTTPS 证书

生成私钥和证书签名请求(CSR)

  • 在服务器上生成一个私钥,并基于该私钥生成一个 CSR 文件。CSR 文件包含服务器的基本信息,如域名、组织名称等。
  • 生成私钥和 CSR 的命令(以 OpenSSL 为例):
openssl req -new -newkey rsa:2048 -nodes -keyout yourdomain.key -out yourdomain.csr

向 CA 申请证书

  • 将生成的 CSR 文件提交给证书颁发机构(CA)申请证书。CA 会验证你的身份,并生成一个签名的证书文件(通常是 .crt.pem 文件)。

安装证书

  • 将 CA 签发的证书和私钥一起安装到服务器上,并配置服务器软件(如 Apache、Nginx)使用这些证书文件。例如,在 Nginx 中的配置:
server {
    listen 443 ssl;
    server_name yourdomain.com;

    ssl_certificate /etc/ssl/certs/yourdomain.crt;
    ssl_certificate_key /etc/ssl/private/yourdomain.key;

    # 其他配置...
}

配置服务器

  • 根据需求,可以进一步配置 SSL/TLS 版本、加密算法、HTTP/2 支持等选项,以优化 HTTPS 性能和安全性。

测试和验证

  • 配置完成后,重启服务器并使用浏览器访问 HTTPS 站点,确保证书已正确安装并工作。同时可以使用工具(如 SSL Labs 的 SSL Test)来检测和优化 HTTPS 配置。

客户端验证证书的方式

大多数操作系统和运行环境已经自带了受信任的证书颁发机构(CA)的根证书库。客户端在进行 HTTPS 通信时,会自动使用这些系统预装的根证书来验证服务器的证书。

1. 服务器发送证书

  • 当客户端发起 HTTPS 请求时,服务器会发送其 SSL/TLS 证书。这份证书包含服务器的公钥、证书的颁发者(CA)、证书的有效期以及证书所适用的域名等信息。

2. 验证证书链

  • 服务器发送的证书通常是由一个中间 CA 证书签署的,而这个中间 CA 证书又是由一个根 CA 证书签署的。客户端会检查证书链,从服务器证书向上追溯,直到找到一个受信任的根证书。这个根证书必须在客户端的 CA 证书库中被信任。
  • 客户端依次验证链中的每一个证书,确保每个证书都是由上一级证书签署的,直到验证到受信任的根证书。如果链中任何一个证书不可信或无法验证,整个验证过程将失败。

3. 检查域名匹配

  • 客户端会检查服务器证书中的“通用名称”(Common Name, CN)或“主题备用名称”(Subject Alternative Name, SAN)是否与请求的域名匹配。这是为了防止中间人攻击。如果域名不匹配,客户端会认为证书无效。

4. 检查证书有效期

  • 客户端会检查证书的“有效期”字段,确保当前时间在证书的有效期内。如果证书已经过期或尚未生效,客户端将拒绝连接。

5. 检查证书吊销状态

  • 客户端可能会使用在线证书状态协议(OCSP)或证书吊销列表(CRL)检查证书是否已被吊销。如果证书在 CA 的吊销列表中,客户端将拒绝连接。
  • 一些现代浏览器和客户端支持 OCSP Stapling,服务器在 TLS 握手时直接提供OCSP响应,减少了客户端单独查询的开销。

6. 信任根证书

  • 最终的验证步骤是检查证书链的根证书是否在客户端的信任库中。根证书必须是预先被客户端信任的,否则证书链验证将失败,连接将被拒绝。

7. 扩展和附加验证

  • 证书透明度(Certificate Transparency, CT):一些客户端(如现代浏览器)还会检查服务器证书是否在公开的证书透明度日志中注册,以防止伪造证书。
  • 证书的扩展检查:例如,Extended Validation (EV) 证书会显示额外的标识信息,如公司的名称。这种验证更严格,用户可以通过浏览器的地址栏看到更详细的信息,确保他们访问的是合法网站。

8. 用户提示与警告

  • 如果客户端发现证书不可信(如证书过期、域名不匹配、证书被吊销等),它通常会向用户发出警告,提示可能的安全风险,并阻止继续连接。