百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

如何使用有效的 HTTPS 证书弥合开发和生产之间的差距

cac55 2024-10-19 02:57 19 浏览 0 评论

软件开发的核心原则之一涉及维护开发/生产的平衡。但对于 localhost. 开发人员来说,情况并非总是如此

回顾一下,开发/产品一致性是指保持开发、登台和生产环境尽可能相似,以避免遇到未检测到的错误。缺乏开发/产品对等性可能会导致在一种环境中出现错误,但无法在其他环境中复制和调试。

例如,如果您的生产网站在 HTTPS 上运行,您会希望本地开发网站也在 HTTPS 上运行。

“它可以在我的电脑上运行……”漫画。图片来源

为什么应该在本地主机上启用 HTTPS

您可能会想,“ localhost 的行为不就和 https 一样吗?这难道不是为什么某些在已部署的 HTTP 站点上不起作用的 API 却可以在 http://localhost ?”

嗯,是。对于大量用例, http://localhost/<yourportnumber> 就可以了,其行为类似于 HTTPS 站点。但也有一些情况并非如此。以下是此类案例的一些示例:

调试混合内容错误:当页面上的所有内容不是通过 HTTPS 检索时,就会发生混合内容错误。

例如,如果您使用基于 HTTP 的 CDN 中的 JavaScript 库,则当您在本地主机上工作时,一切都可能按预期工作。但在基于 HTTPS 的生产环境中,情况可能会有所不同。

在 HTTPS 页面上,任何从 HTTP URL 加载 JavaScript 的请求都将被浏览器阻止。由于您的本地环境在本地主机上运行,因此您可能无法发现此错误。

在本地测试需要 HTTPS 的第三方库或 API(例如 OAuth 或 Instagram 的 API)。

或者在本地开发期间跨浏览器设置和测试安全 cookie: Secure cookie 仅在 HTTPS 上设置,而不是在所有浏览器的 http://localhost 上设置。

还有其他情况,因为这并不是详尽的列表。但为了避免 http://localhost 出现问题,或者它的行为与您的生产站点不太一样,只需使用 HTTPS 进行本地开发。

现在,要为本地环境启用 HTTPS,您需要为其配置 TLS 证书。我们来谈谈这个吧。

HTTPS 和 TLS 证书之间的关系

如果您已经了解 TLS 证书以及它们如何启用 HTTPS,或者您专注于解决方案并希望立即采取行动,则可以跳过本部分并转到下一部分。

但如果您想了解一些背景信息,了解为什么 TLS 证书是关键,请继续阅读。

什么是 HTTPS?

HTTPS 是 HTTP 的安全扩展,HTTP 是用于通过互联网传送网页的通信协议。

HTTPS 本质上是 HTTP,加上了传输层安全 (TLS) 协议提供的附加安全层。 HTTP 处理互联网上的数据传输,而 TLS 则对数据进行加密以确保其安全性,从而产生了 HTTPS。

什么是 TLS?

数据传输的 TLS 加密基于 TLS 证书从 Web 服务器到客户端(通常是浏览器)的传输。

它的工作原理如下:当您输入要访问的 HTTPS URL 时,您的浏览器会尝试与托管提供网页所需文件的 Web 服务器建立 HTTPS 连接。为此,需要执行 TLS 握手。

TLS 握手的目标是让浏览器和 Web 服务器就共享对称加密密钥达成一致,该密钥用于加密和解密它们之间交换的消息。但这个对称密钥需要以安全的方式交换。

对称密钥是加密的首选加密密钥类型,因为它们运行速度更快(在网络中,速度就是一切)。但它们的风险更大,因为无法确保或验证不良行为者不会拦截传输中的对称密钥并声称它。此外,无法验证是否只有预期的收件人才获得密钥。

这就是非对称密钥要解决的问题。非对称密钥用于在客户端和服务器之间安全地传输对称密钥。

描绘浏览器和 Web 服务器之间安全通信的插图

非对称密钥如何工作?

非对称密钥使用一对密钥:公钥和私钥。交换数据时,发送者使用公钥来加密消息,接收者使用其私钥(保密且从不共享)来解密消息。由于私钥是保密的,这确保了只有预期的接收者才能解密消息。

例如,如果服务器想要安全地从浏览器接收对称密钥,它会创建一对非对称密钥并与浏览器共享公钥。浏览器使用公钥对对称密钥进行加密,并将加密后的消息发送到服务器。然后,服务器使用其私钥(只有服务器知道)来解密消息。

这就是非对称密钥如何确保只有具有相应私钥的预期接收者才能收到对称密钥。

但是Web服务器如何将其公钥送到浏览器手中,浏览器如何确定它收到的公钥实际上属于Web服务器呢?他们可以将其放入文件或文档中,这就是 TLS 证书的用途。

TLS 证书是托管在网站源服务器中的数据文件,包含服务器的公钥以及标识 Web 服务器的相关信息。

那么,信任问题又如何呢?这是游戏的第二个组成部分,即证书颁发机构发挥作用的地方。

什么是证书颁发机构?

证书颁发机构 (CA) 是客户端和服务器都信任的实体。其主要作用是负责任地颁发 TLS 证书。

CA 充当担保人或裁判人。例如,如果A先生想与B先生进行交易,但他们之前没有关系,则B先生信任的C先生可以为B先生提供担保。

在这个场景中,C先生扮演了CA的角色,帮助客户端和服务器之间建立信任。 TLS证书必须由证书颁发机构签名才能解决信任问题。

显示证书颁发机构如何工作的插图

因此,TLS 证书是包含 Web 服务器公钥的文件,由证书颁发机构签名,以证明证书中包含的公钥确实是 Web 服务器的公钥。

在 TLS 握手期间,客户端和服务器使用公钥和私钥来交换随机生成的数据。该随机数据用于创建新的共享对称密钥以进行加密,称为会话密钥。 HTTPS 就是这样产生的。

好的,今天的密码学就足够了。现在您已经了解了证书的基础知识,让我们看看如何为您的 [localhost](<http://localhost>) 服务器获取 TLS 证书。

如何为本地主机服务器获取 TLS 证书

现在您已经了解了证书在启用 HTTPS 中的作用,很清楚我们需要做什么才能为本地 Web 服务器启用 HTTPS:我们需要从设备上的浏览器和客户端信任的证书颁发机构获取 TLS 证书。

操作系统和浏览器附带了公共信任的 CA 的预定义列表,例如 Let’s Encrypt。要查看系统根信任存储上受信任的证书颁发机构列表,如果您使用的是 Mac,请搜索“钥匙串访问”。

但由于各种原因,这些 CA 被禁止向 localhost 等私有 TLD 上的域颁发证书。

无需 CA 即可创建自签名 TLS 证书。在这种情况下,您将亲自签署您的证书并证明您的公钥就是您的公钥。

使用自签名证书,没有外部机构可以验证源服务器是否是其声称的服务器。

浏览器不认为自签名证书值得信赖,并且尽管有 https:// URL,但仍可能将带有自签名证书的网站标记为“不安全”。这就是 Gatsby https 标志所发生的情况。

Firefox 浏览器上的自签名证书错误。

你需要做的是:

  1. 创建您自己的本地证书颁发机构
  2. 让您的系统/环境信任它
  3. 使用 CA 为本地 Web 服务器颁发 TLS 证书
  4. 在您的 Web 服务器上安装证书

这听起来可能很多,是吗?好消息是,使用名为 step-ca 的开源项目实际上非常容易且快速。

如何使用 step-ca 为本地 Node.js 服务器配置 TLS 证书

step-ca 是专用和内部网络的开源证书颁发机构。

首先,请按照下列步骤操作:

首先,打开你的终端。如果您使用的是 Mac,请运行 brew install step 来安装 step-ca 和随附的 CLI 工具 step-cli

step-cli 是一个 CLI 工具,可用于与 step-ca 进行交互和通信。如果您使用的是 Windows 或 Linux,则可以在文档中找到安装说明。

接下来,运行 step-init 。此命令在本地计算机上创建并初始化 step-ca 证书颁发机构服务器。

然后,系统会提示您选择一些选项,如下图所示:

step-ca 设置选项的屏幕截图

让我们一一回顾一下:

  • 部署类型:与上图相同,选择“独立”,因为您自己运行 step-ca 选项。
  • 您希望如何命名您的 PKI:将“Linda-PKI”更改为您希望的 PKI 名称。
  • 您希望将哪些 DNS 或 IP 地址添加到新 CA:这要求您指定允许 CA 颁发证书的域名或 IP 地址。由于这是针对本地主机的,因此输入“localhost”。
  • 您希望将 CA 绑定到什么 IP 和端口:要求您指定 CA 服务器运行的端口。
  • 您希望如何命名您的配置者:对于 step-ca 生态系统,配置者是被授权向 CA 发起证书颁发操作的个人或实体。将其视为使用您的电子邮件作为用户名在平台上注册的输入。
  • 为您的 CA 密钥和第一个配置者选择密码:这是将用于授权证书颁发请求的密码。记下您的密码,因为它将在后续步骤中派上用场。

填写完所有选项后,您将看到如下所示的屏幕,显示您的 CA 和其他必要元素已创建并准备就绪。

step-ca 成功屏幕的屏幕截图

现在,运行 step certificate install <path-to-root_ca.crt> 将 CA 根证书文件安装到您的系统信任存储中。将 <path-to-root_ca.crt> 替换为上一步中您自己的文件路径。从我的例子来看,我的是 </Users/linda/.step/certs/root_ca.crt>

还记得我提到过您的证书颁发机构必须受到浏览器的信任,并且所有操作系统和浏览器都预装了受信任的证书颁发机构吗?此步骤将您刚刚创建的证书颁发机构添加到该列表中。

运行此命令后,您将看到如下屏幕:

step-ca 根证书安装成功屏幕截图

接下来,运行 step-ca <path-to-ca.json> 启动 CA 服务器。在我的示例中, <path-to-ca.json> 将是第三步中的 /Users/linda/.step/config/ca.json 。您将看到一个屏幕,通知您您的 CA 现在正在您在第三步中指定的端口上运行。

使用您的 CA 为您的本地主机服务器/项目创建新的证书和私钥。在项目服务器上运行 step ca certificate <subject> <crt-file> <key-file> ,其中:

  • subject 是您要为其获取证书的服务器的域名或 IP 地址,
  • crt-file 是要写入证书的文件名,并且
  • key-file 是写入私钥的文件。

对于我的示例,我的命令是 step ca certificate localhost server.crt server.key

步骤-CA 证书和私钥创建步骤成功屏幕的屏幕截图

您会注意到将在您的项目中创建 server.crt 和 server.key 文件。

最后,在 index.js 方法中的 server.crtserver.key 文件作为 cert 和 key 属性> 文件。这指示生成的 Node.js 服务器在 TLS 握手期间使用证书和私钥来启用 HTTPS。

我的 node.js 演示项目中 https.createServer 函数引用的 server.crt 和 server.key 文件的屏幕截图

停止并重新启动 Node.js 服务器,然后导航到本地主机 URL。您的本地主机现在应该在 HTTPS 上运行,如下所示(注意挂锁标志):

相关推荐

Mac电脑强制删除任何软件方法-含自启动应用

对于打工者来说,进入企业上班使用的电脑大概率是会被监控起来,比如各种流行的数据防泄漏DLP,奇安信天擎,甚至360安全卫士,这些安全软件你想卸载是非常困难的,甚至卸载后它自己又安装回来了,并且还在你不...

Linux基础知识 | 文件与目录大全讲解

1.linux文件权限与目录配置1.文件属性Linux一般将文件可存取的身份分为三个类别,分别是owner/group/others,且三种身份各read/write/execute等权限文...

文件保护不妥协:2025 年 10 款顶级加密工具推荐

数据安全无小事,2025年这10款加密工具凭借独特功能脱颖而出,从个人到企业场景全覆盖,第一款为Ping32,其余为国外英文软件。1.Ping32企业级加密核心工具,支持200+文件格...

省心省力 一个软件搞定系统维护_省心安装在哪里能找到

◆系统类似于我们居住的房间,需要经常打理才能保持清洁、高效。虽然它本身也自带一些清理和优化的工具,但借助于好用的第三方工具来执行这方面的任务,会更让人省心省力。下面笔者就为大家介绍一款集多项功能于一身...

JAVA程序员常用的几个工具类_java程序员一般用什么软件写程序

好的工具做起事来常常事半功倍,下面介绍几个开发中常用到的工具类,收藏一下,也许后面真的会用到。字符串处理:org.apache.commons.lang.StringUtilsisBlank(Char...

手工解决Windows10的若干难题_windows10系统卡顿怎么解决

【电脑报在线】很多朋友已经开始使用Win10,估计还只是测试版本的原因,使用过程中难免会出现一些问题,这里介绍解决一些解决难题的技巧。技巧1:让ProjectSpartan“重归正途”从10074...

System32文件夹千万不能删除,看完这篇你就知道为什么了

C:\Windows\System32目录是Windows操作系统的关键部分,重要的系统文件存储在该目录中。网上的一些恶作剧者可能会告诉你删除它,但你不应该尝试去操作,如果你尝试的话,我们会告诉你会发...

Windows.old 文件夹:系统备份的解析与安全删除指南

Windows.old是Windows系统升级(如Win10升Win11)或重装时,系统自动在C盘创建的备份文件夹,其核心作用是保留旧系统的文件、程序与配置,为“回退旧系统”提供保...

遇到疑难杂症?Windows 10回收站问题巧解决

回收站是Windows10的一个重要组件。然而,我们在使用过程中,可能会遇到一些问题。例如,不论回收站里有没有文件,都显示同一个图标,让人无法判别回收站的空和满的真实情况;没有了像Windows7...

卸载软件怎么彻底删掉?简单几个步骤彻底卸载,电脑小白看过来

日常工作学习生活中,我们需要在安装一些软件程序,但随着软件的更新迭代速度,很多时候我们需要重新下载安装新的程序,这时就需要将旧的一些软件程序进行卸载。但是卸载软件虽然很简单,但是很多小伙伴们表示卸载不...

用不上就删!如何完全卸载OneDrive?

作为Windows10自带的云盘,OneDrive为资料的自动备份和同步提供了方便。然而,从隐私或其他方面考虑,有些人不愿意使用OneDrive。但Windows10本身不提供直接卸载OneDri...

【Linux知识】Linux下快速删除大量文件/文件夹方法

在Linux下,如果需要快速删除大量文件或文件夹,可以使用如下方法:使用rm命令删除文件:可以使用rm命令删除文件,例如:rm-rf/path/to/directory/*这个命令会递...

清理系统不用第三方工具_清理系统垃圾用什么软件

清理优化系统一定要借助于优化工具吗?其实,手动优化系统也没有那么神秘,掌握了方法和技巧,系统清理也是一件简单和随心的事。一方面要为每一个可能产生累赘的文件找到清理的方法,另一方面要寻找能够提高工作效率...

系统小技巧:软件卸载不了?这里办法多

在正常情况下,我们都是通过软件程序组中的卸载图标,或利用控制面板中的“程序和功能”模块来卸载软件的。但有时,我们也会发现利用卸载图标无法卸载软件或者卸载图标干脆丢失找不到了,甚至控制面板中卸载软件的功...

麒麟系统无法删除文件夹_麒麟系统删除文件权限不够

删除文件夹方法例:sudorm-rf文件夹名称。删除文件方法例:sudorm-r文件名包括扩展名。如果没有权限,给文件夹加一下权限再删。加最高权限chmod775文件名加可执行权限...

取消回复欢迎 发表评论: