如何使用有效的 HTTPS 证书弥合开发和生产之间的差距
cac55 2024-10-19 02:57 22 浏览 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 浏览器上的自签名证书错误。
你需要做的是:
- 创建您自己的本地证书颁发机构
- 让您的系统/环境信任它
- 使用 CA 为本地 Web 服务器颁发 TLS 证书
- 在您的 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.crt 和 server.key 文件作为 cert 和 key 属性> 文件。这指示生成的 Node.js 服务器在 TLS 握手期间使用证书和私钥来启用 HTTPS。
我的 node.js 演示项目中 https.createServer 函数引用的 server.crt 和 server.key 文件的屏幕截图
停止并重新启动 Node.js 服务器,然后导航到本地主机 URL。您的本地主机现在应该在 HTTPS 上运行,如下所示(注意挂锁标志):
相关推荐
- 服务器用的CPU和个人电脑用的CPU有什么区别?一篇文章告诉你!
-
服务器cpu和普通cpu的区别你的电脑CPU是‘短跑健将’,服务器CPU却是‘铁人三项选手’——它不追求瞬间爆发力,而要7×24小时扛住千军万马的数据洪流!想知道为什么企业机房敢收天价服务费?答案全藏...
- “吃鸡”新版本第1天,玩家进入游戏点击“立即更新”,后悔了!
-
欢迎诸位小伙伴们来到天哥开讲的《和平精英》“精英小课堂”~每逢两三个月,这款游戏就会迎来一次大版本迭代更新,很多朋友会在第一时间更新版本,前往全新的主题模式里一探究竟。不过也有一些老玩家并不会立刻更新...
- 中关村在线·aigo存储杯《无畏契约》全国高校争霸赛招募启事
-
以青春之名,燃电竞之火1赛事背景与宗旨在金秋送爽的9月,芊芊学子们即将回归校园生活。为了给精彩的校园生活锦上添花,由中关村在线与aigo存储联合主办的《无畏契约》全国高校争霸赛正式启幕,旨在为全国高...
- 【生肖狗】9.7-9.10提醒:人算不如天算,转变即是转机
-
九月上旬的风,带着秋意的清爽,也带着几分不可捉摸的变数。对于生肖狗的朋友们来说,9月7日到9月10日这四天,格外需要留意“计划与变化”的碰撞——你们向来习惯提前规划,做事稳妥周全...
- 转转客服IM系统的WebSocket集群架构设计和部署方案
-
本文由转转技术李帅分享,原题“转转客服IM的WebSocket集群部署方案”,下文有修订和重新排版。1、引言转转作为国内头部的二手闲置交易平台,拥有上亿的用户。用户在使用转转app遇到问题时,一般可以...
- 上线3天Steam好评率86%,《时间旅者:重生曙光》开启生存恐怖新篇章
-
这里究竟发生了什么?末日降临,真正的故事悄然启幕。目前,生存恐怖类游戏《时间旅者:重生曙光(Cronos:TheNewDawn)》已在PC(Steam、EpicGamesStore)、P...
- 什么神仙洗衣机让我一天有28小时?拆开松下「大四洗」藏了啥秘密
-
说起家庭洗衣的烦恼,想必很多人都有过类似的经历:贴身内衣要单独洗,宝宝的口水巾得小心呵护,宠物玩具怕藏污纳垢,床单被套又体积庞大,把这些东西混在一起洗担心越洗越脏,分开洗又得反复操作,洗完烘、烘完再洗...
- 爆料人挖出GTA6注册的奇葩域名 延续经典讽刺风格
-
等待《侠盗猎车手6》的日子跨越了数个春秋,在游戏圈期盼着这部可能成为史上最重磅游戏的过程中,每过一段时间就会有些许消息浮出水面。最新线索来自数据挖掘者Tez2在GTA论坛的发现,他可能偶然发现了关于...
- 跟着故事去旅行——读《驼峰间:旅行、探险与征服》
-
作者:郭冰茹《驼峰间》记录了旅行家伊本·白图泰有生之年流传的一则寓言,说一对父子被关进了监狱,有一天儿子问父亲他们每天吃的都是些什么肉,父亲说有牛、羊和骆驼,并且详细地描述了每种动物的特点。但不管父亲...
- 前端工程师需要熟悉的Linux服务器(SSH 终端操作)指令
-
在Linux服务器管理中,SSH(SecureShell)是远程操作的核心工具。以下是SSH终端操作的常用命令和技巧,涵盖连接、文件操作、系统管理等场景:一、SSH连接服务器1.基本连接...
- 跳票6年后,「丝之歌」首发把Steam服务器干爆了 | 玩点好的
-
文丨果脯樱花隧道昨天晚上22点,「鸽」了6年的《空洞骑士:丝之歌》终于上线,算是了却不少玩家的执念。毕竟,这款游戏实在让人等了太多太多年,而且曾有过多次定档后跳票的「案底」,不知道把多少人都整出了P...
- 对标魔兽失败!腾讯版“魔兽”运营一年多后,宣布国际服凉凉
-
大家好,这里是正惊游戏,我是正惊小弟。有很多游戏都想干掉《魔兽世界》,但是大部分魔兽杀手都知道自己不是魔兽的对手,不过是想蹭一下人气而已。腾讯也有一款曾经想对标魔兽的大作,可是上线才一年半国际服就宣布...
- 408 Request Timeout:服务器等待客户端发送请求的时间过长。
-
408RequestTimeout是HTTP状态码之一,表示客户端在发送请求时,服务器等待的时间过长,最终放弃了处理该请求。此问题通常与网络延迟、客户端配置、服务器设置或者应用程序的性能有关...
- 梦幻西游:9.9维护解读,全新时间服锁定129级
-
梦幻西游:9.9维护解读,全新时间服锁定129级9月9日维护解读。1、教师节活动开启,一共7天。挂机,答题,收笔墨纸砚,收海马,搞起来。或者是提前收点家具,教师节期间体力珍贵,家具会涨价。又或者是教师...
- 只是拆掉一面墙,空间就立马大变样,这种设计思路,值得学习
-
你有没有过这样的经历?刚买的房子户型图看起来方方正正,装修完却发现——玄关鞋柜只能塞在角落,进门就撞墙;餐厅正好在过道中间,吃饭像走流程;明明有四个房间,却有一个空着没用,像块食之无味的鸡肋;客餐厅之...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- 服务器用的CPU和个人电脑用的CPU有什么区别?一篇文章告诉你!
- “吃鸡”新版本第1天,玩家进入游戏点击“立即更新”,后悔了!
- 中关村在线·aigo存储杯《无畏契约》全国高校争霸赛招募启事
- 【生肖狗】9.7-9.10提醒:人算不如天算,转变即是转机
- 转转客服IM系统的WebSocket集群架构设计和部署方案
- 上线3天Steam好评率86%,《时间旅者:重生曙光》开启生存恐怖新篇章
- 什么神仙洗衣机让我一天有28小时?拆开松下「大四洗」藏了啥秘密
- 爆料人挖出GTA6注册的奇葩域名 延续经典讽刺风格
- 跟着故事去旅行——读《驼峰间:旅行、探险与征服》
- 前端工程师需要熟悉的Linux服务器(SSH 终端操作)指令
- 标签列表
-
- 如何绘制折线图 (52)
- javaabstract (48)
- 新浪微博头像 (53)
- grub4dos (66)
- s扫描器 (51)
- httpfile dll (48)
- ps实例教程 (55)
- taskmgr (51)
- s spline (61)
- vnc远程控制 (47)
- 数据丢失 (47)
- wbem (57)
- flac文件 (72)
- 网页制作基础教程 (53)
- 镜像文件刻录 (61)
- ug5 0软件免费下载 (78)
- debian下载 (53)
- ubuntu10 04 (60)
- web qq登录 (59)
- 笔记本变成无线路由 (52)
- flash player 11 4 (50)
- 右键菜单清理 (78)
- cuteftp 注册码 (57)
- ospf协议 (53)
- ms17 010 下载 (60)