RESTful API 之 HTTPS 的多种实现方式

阅读时长 5 分钟读完

前言

在使用 RESTful API 进行前后端交互时,使用 HTTPS 进行加密传输已经成为了必备的选择。HTTPS 可以有效地避免信息被窃听、篡改和冒充等问题。本篇文章将介绍 HTTPS 的多种实现方式,旨在为前端开发者提供深入了解和学习 HTTPS 实现原理的指导。

HTTPS 原理

在介绍 HTTPS 的多种实现方式之前,有必要简单了解一下 HTTPS 的原理。HTTPS 首先通过 SSL 或者 TLS 协议进行握手,建立安全连接,之后通过该连接传输数据。SSL 或者 TLS 协议使用了公钥加密技术、对称加密技术和哈希算法等技术来保证数据传输的机密性、完整性和可靠性。

在 HTTPS 连接中, 正确使用 SSL 或 TLS 协议来保护信息的机密性至关重要。实践中的 HTTPS 实现方式通常基于以下几种安全性选择:

1. 证书颁发机构(Certificate Authority)

运用证书颁发机构可以保证加密通信的双方的身份,证书颁发机构是一个第三方的中立机构,它的使命是颁发可信赖的证书,并在证书和颁发者之间建立信任。HTTPS 的一方通常会提交给证书颁发机构申请证书,证书颁发机构通过验证提交者的身份和信息的真实性来签发证书,从而为加密通讯双方提供身份认证。

2. 对称密钥与非对称密钥

加密算法通常使用对称密钥和非对称密钥两种类型进行表征,其中对称密钥指的是发出一密文需要一个指定的密钥才能解密的密钥,非对称密钥则是指可以使用私钥加密,但只能使用对应的公钥解密的密钥。实践中,HTTPS 一般使用非对称加密来建立安全通信的基础,之后采用对称加密通信,使用非对称加密建立安全连接的过程一般称为 SSL/TLS 握手。

3. 证书和密钥的存储和保护

为了确保 HTTPS 的安全性,证书和密钥必须得到妥善的保护。因此,一般的 HTTPS 实现需要依托于以下机制进行保护:硬件加密保护、隔离保护、密钥轮换、轮换以后的密钥销毁。

HTTPS 实现方式

在我国,HTTPS 一般有以下的实现方式:

1. SSL VPN

SSL VPN 是指在 TLS 协议之上,使用单一的HTTP/HTTPS通道实现远程访问的技术。SSL VPN 在数据传输时使用 HTTPS 协议进行传输,数据是通过浏览器访问 SSL VPN 的入口,流经协议栈后构建一条基于 TLS 的数据安全通道到达后端服务器或应用系统。

具体地,SSL VPN 的基本建设过程是将 SSL VPN 组件和证书等信息安装到 SSL VPN 服务器上,用户通过 HTTPS 访问 SSL VPN 服务器的网关,输入用户名和密码,通过 SSL VPN 服务器的身份验证机制完成远程登陆,完成 SSL VPN 通道建设。虽然 SSL VPN 的加密程度较高,但是部署复杂度也较高,并且需要特别的硬件设备进行支撑,成本较高。

2. Web 端口重定向

Web 端口重定向 实现 HTTPS 的方式是将普通 HTTP 服务端口 80 变更成为 HTTPS 服务端口 443 。在这种方式中,浏览器访问的是服务器的 HTTP 端口 80 ,由服务器进行内部重定向到 443 端口。因为在内部网络中使用的是 HTTPS 传输,因此实现了安全通信。

实践证明,Web 端口重定向的实现方式最为简单,但是也有许多限制,比如只能开启一个网站的服务,因为事实上多个网站的 HTTP 端口可能会指向同一个 IP 地址。

3. 加密反向代理

加密反向代理 是指将公网上面的 HTTP 请求通过代理服务器转换为私有网络中的 HTTPS 访问。当代理服务器接收到公网请求后,就可以将请求通道转换为 HTTPS,并将这个转换结果返回到客户端。

当然,这种方式需要使用到反向代理服务器,在反向代理服务器上需要配置一个带有 SSL 证书的 HTTP 服务器。反向代理服务器会将请求通道转换为 HTTPS,再转发到内部的 HTTP 服务器,然后将网络响应数据通过加密通道反向流回到客户端。实践证明,加密反向代理是用于构造安全传输通道的最理想的方式之一。

4. 物理加密

对于 HTTPS 通信,终端与服务器之间的通讯数据是基于非对称密钥加密技术进行传输的。在这种情况下,一种基于硬件的安全加密解决方案被提出:物理加密。

物理加密通过在客户端和服务器之间安装一个加密设备来获得非常高的安全性,客户端和服务器之间的通讯数据实际上是基于加密设备进行加密传输的,从而大大提高了安全性,保护网络数据不受攻击。

总结

在确定了需要使用 HTTPS 实现加密传输的前提下,根据使用场景和客户需求,选择恰当的 HTTPS 实现方式是非常重要的。本篇文章对 HTTPS 的多种实现方式进行了详细的介绍,希望有助于前端开发者对于 HTTPS 实现方式的深入了解和学习,以及指导实际开发中的实践。附上基于 Node.js 框架实现的 HTTPS 调用示例代码:

-- -------------------- ---- -------
----- ----- - -----------------

------------------------------------ ----- -- -
  -------------------------- ----------------
  ----------------------- -------------

  -------------- --- -- -
    ------------------------
  ---

-------------- --- -- -
  -----------------
---
展开代码

参考资料:

[1] 徐益祥. SSL VPN 系统的设计与实现[D]. 同济大学, 2015.

[2] 宗瀚亭. HTTPS 通信的原理与应用[D]. 中山大学, 2014.

[3] 钱石磊. 加密反向代理技术的实现研究[D]. 郑州大学, 2013.

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64c9e7fd5ad90b6d04188783

纠错
反馈

纠错反馈