跳转到主要内容

标签(标签)

资源精选(342) Go开发(108) Go语言(103) Go(99) angular(82) LLM(75) 大语言模型(63) 人工智能(53) 前端开发(50) LangChain(43) golang(43) 机器学习(39) Go工程师(38) Go程序员(38) Go开发者(36) React(33) Go基础(29) Python(24) Vue(22) Web开发(20) Web技术(19) 精选资源(19) 深度学习(19) Java(18) ChatGTP(17) Cookie(16) android(16) 前端框架(13) JavaScript(13) Next.js(12) 安卓(11) 聊天机器人(10) typescript(10) 资料精选(10) NLP(10) 第三方Cookie(9) Redwoodjs(9) LLMOps(9) Go语言中级开发(9) 自然语言处理(9) PostgreSQL(9) 区块链(9) mlops(9) 安全(9) 全栈开发(8) ChatGPT(8) OpenAI(8) Linux(8) AI(8) GraphQL(8) iOS(8) 软件架构(7) Go语言高级开发(7) AWS(7) C++(7) 数据科学(7) whisper(6) Prisma(6) 隐私保护(6) RAG(6) JSON(6) DevOps(6) 数据可视化(6) wasm(6) 计算机视觉(6) 算法(6) Rust(6) 微服务(6) 隐私沙盒(5) FedCM(5) 语音识别(5) Angular开发(5) 快速应用开发(5) 提示工程(5) Agent(5) LLaMA(5) 低代码开发(5) Go测试(5) gorm(5) REST API(5) 推荐系统(5) WebAssembly(5) GameDev(5) CMS(5) CSS(5) machine-learning(5) 机器人(5) 游戏开发(5) Blockchain(5) Web安全(5) Kotlin(5) 低代码平台(5) 机器学习资源(5) Go资源(5) Nodejs(5) PHP(5) Swift(5) 智能体(4) devin(4) Blitz(4) javascript框架(4) Redwood(4) GDPR(4) 生成式人工智能(4) Angular16(4) Alpaca(4) 编程语言(4) SAML(4) JWT(4) JSON处理(4) Go并发(4) kafka(4) 移动开发(4) 移动应用(4) security(4) 隐私(4) spring-boot(4) 物联网(4) nextjs(4) 网络安全(4) API(4) Ruby(4) 信息安全(4) flutter(4) 专家智能体(3) Chrome(3) CHIPS(3) 3PC(3) SSE(3) 人工智能软件工程师(3) LLM Agent(3) Remix(3) Ubuntu(3) GPT4All(3) 软件开发(3) 问答系统(3) 开发工具(3) 最佳实践(3) RxJS(3) SSR(3) Node.js(3) Dolly(3) 移动应用开发(3) 低代码(3) IAM(3) Web框架(3) CORS(3) 基准测试(3) Go语言数据库开发(3) Oauth2(3) 并发(3) 主题(3) Theme(3) earth(3) nginx(3) 软件工程(3) azure(3) keycloak(3) 生产力工具(3) gpt3(3) 工作流(3) C(3) jupyter(3) 认证(3) prometheus(3) GAN(3) Spring(3) 逆向工程(3) 应用安全(3) Docker(3) Django(3) R(3) .NET(3) 大数据(3) Hacking(3) 渗透测试(3) C++资源(3) Mac(3) 微信小程序(3) Python资源(3) JHipster(3) 大型语言模型(2) 语言模型(2) 可穿戴设备(2) JDK(2) SQL(2) Apache(2) Hashicorp Vault(2) Spring Cloud Vault(2) Go语言Web开发(2) Go测试工程师(2) WebSocket(2) 容器化(2) AES(2) 加密(2) 输入验证(2) ORM(2) Fiber(2) Postgres(2) Gorilla Mux(2) Go数据库开发(2) 模块(2) 泛型(2) 指针(2) HTTP(2) PostgreSQL开发(2) Vault(2) K8s(2) Spring boot(2) R语言(2) 深度学习资源(2) 半监督学习(2) semi-supervised-learning(2) architecture(2) 普罗米修斯(2) 嵌入模型(2) productivity(2) 编码(2) Qt(2) 前端(2) Rust语言(2) NeRF(2) 神经辐射场(2) 元宇宙(2) CPP(2) 数据分析(2) spark(2) 流处理(2) Ionic(2) 人体姿势估计(2) human-pose-estimation(2) 视频处理(2) deep-learning(2) kotlin语言(2) kotlin开发(2) burp(2) Chatbot(2) npm(2) quantum(2) OCR(2) 游戏(2) game(2) 内容管理系统(2) MySQL(2) python-books(2) pentest(2) opengl(2) IDE(2) 漏洞赏金(2) Web(2) 知识图谱(2) PyTorch(2) 数据库(2) reverse-engineering(2) 数据工程(2) swift开发(2) rest(2) robotics(2) ios-animation(2) 知识蒸馏(2) 安卓开发(2) nestjs(2) solidity(2) 爬虫(2) 面试(2) 容器(2) C++精选(2) 人工智能资源(2) Machine Learning(2) 备忘单(2) 编程书籍(2) angular资源(2) 速查表(2) cheatsheets(2) SecOps(2) mlops资源(2) R资源(2) DDD(2) 架构设计模式(2) 量化(2) Hacking资源(2) 强化学习(2) flask(2) 设计(2) 性能(2) Sysadmin(2) 系统管理员(2) Java资源(2) 机器学习精选(2) android资源(2) android-UI(2) Mac资源(2) iOS资源(2) Vue资源(2) flutter资源(2) JavaScript精选(2) JavaScript资源(2) Rust开发(2) deeplearning(2) RAD(2)

category

大多数时候,http://localhost出于开发目的,其行为类似HTTPS。然而,也有一些特殊情况,例如自定义主机名或跨浏览器使用安全cookie,在这些情况下,您需要明确设置您的开发网站,使其表现得像HTTPS,以准确地表示您的网站在生产中的工作方式。(如果您的生产网站不使用HTTPS,请优先切换到HTTPS)。

本页介绍如何使用HTTPS在本地运行您的网站。

注意:在本文中,关于localhost的语句也适用于127.0.0.1和[::1],因为它们都描述了本地计算机地址(也称为环回地址)。为了简单起见,这些说明没有指定端口号。所以当你看到http://localhost,读作http://localhost:{PORT}或http://127.0.0.1:{端口}。


有关简要说明,请参阅mkcert快速参考**

使用mkcert使用HTTPS在本地运行您的网站(推荐)


在本地开发站点和访问中使用HTTPShttps://localhost或https://mysite.example(自定义主机名),您需要由设备和浏览器信任的实体(称为可信证书颁发机构(CA))签名的TLS证书。在创建HTTPS连接之前,浏览器会检查开发服务器的证书是否由受信任的CA签名。

我们建议使用跨平台CA mkcert来创建和签署您的证书。有关其他有用的选项,请参阅使用HTTPS在本地运行您的网站:其他选项。

许多操作系统包括用于创建证书的库,例如openssl。然而,它们比mkcert更复杂、更不可靠,而且不一定是跨平台的,这使得大型开发团队更难访问它们。

小心

 

  • 永远不要导出或共享mkcert在运行mkcert-install时自动创建的rootCA-key.pem文件。攻击者获取此文件后,可以对您可能访问的任何网站进行路径攻击。他们可以拦截从你的机器到任何网站的安全请求——你的银行、医疗保健提供商或社交网络。如果您需要知道rootCA-key.pem的位置以确保其安全,请运行mkcert-CAROOT。
  • 仅将mkcert用于开发目的,并且从扩展上讲,永远不要要求最终用户运行mkcert命令。
  • 开发团队:团队的所有成员都应该单独安装和运行mkcert(而不是存储和共享CA和证书)。

安装程序

 

  • 安装mkcert(仅一次)。

按照说明在操作系统上安装mkcert。例如,在macOS上:

brew install mkcert
brew install nss # if you use Firefox

 

  • 将mkcert添加到本地根CA。

在终端中,运行以下命令:

mkcert -install


这将生成一个本地证书颁发机构(CA)。您的mkcert生成的本地CA仅在您的设备上本地受信任。

  • 为您的网站生成一个由mkcert签名的证书。

在您的终端中,导航到站点的根目录或您希望将证书保存在其中的任何目录。

然后,运行:

mkcert localhost


如果您使用的是像mysite.example这样的自定义主机名,请运行:

mkcert mysite.example


此命令执行两件事:

  • 为您指定的主机名生成证书。
  • 让mkcert对证书进行签名。


您的证书现在已准备就绪,并由浏览器在本地信任的证书颁发机构签名。

  • 将您的服务器配置为使用HTTPS-您刚刚创建的TLS证书。

如何执行此操作的详细信息取决于您的服务器。以下是一些示例:

With node:

server.js(替换{PATH/TO/CERTIFICATE…}和{PORT}):

const https = require('https');
const fs = require('fs');
const options = {
  key: fs.readFileSync('{PATH/TO/CERTIFICATE-KEY-FILENAME}.pem'),
  cert: fs.readFileSync('{PATH/TO/CERTIFICATE-FILENAME}.pem'),
};
https
  .createServer(options, function (req, res) {
    // server code
  })
  .listen({PORT});


👩🏻‍💻 使用http服务器:

按如下方式启动服务器(替换{PATH/TO/CERTIFICATE…}):

http-server -S -C {PATH/TO/CERTIFICATE-FILENAME}.pem -K {PATH/TO/CERTIFICATE-KEY-FILENAME}.pem

👩🏻‍💻 使用React开发服务器:

按如下方式编辑您的package.json,并替换{PATH/TO/CERTIFICATE…}:

"scripts": {
"start": "HTTPS=true SSL_CRT_FILE={PATH/TO/CERTIFICATE-FILENAME}.pem 
SSL_KEY_FILE={PATH/TO/CERTIFICATE-KEY-FILENAME}.pem react-scripts start"


例如,如果您已经在站点的根目录中为localhost创建了证书:

|-- my-react-app
    |-- package.json
    |-- localhost.pem
    |-- localhost-key.pem
    |--...


那么你的开始脚本应该是这样的:

"scripts": {
    "start": "HTTPS=true SSL_CRT_FILE=localhost.pem 
SSL_KEY_FILE=localhost-key.pem react-scripts start"


👩🏻‍💻 其他示例:


打开https://localhost或https://mysite.example在浏览器中仔细检查您是否使用HTTPS在本地运行您的网站。您不会看到任何浏览器警告,因为您的浏览器信任mkcert作为本地证书颁发机构。

mkcert快速参考


要使用HTTPS运行本地开发站点,请执行以下操作:

  • 设置mkcert。

如果您还没有,请安装mkcert,例如在macOS上:

brew install mkcert


检查Windows和Linux的install mkcert说明。

然后,创建一个本地证书颁发机构:

mkcert -install

 

  • 创建一个受信任的证书。
mkcert {YOUR HOSTNAME e.g. localhost or mysite.example}


这将创建mkcert自动签名的有效证书。

将开发服务器配置为使用HTTPS和您在步骤2中创建的证书。

您现在可以在浏览器中访问https://{YOUR HOSTNAME},而不会发出警告

注意:这样做仅用于开发目的,切勿导出或共享文件rootCA-key.pem。如果您需要知道该文件的位置以确保其安全,请运行mkcert-CAROOT。

</div>


使用HTTPS在本地运行您的网站:其他选项


以下是设置证书的其他方法。这些通常比使用mkcert更复杂或风险更大。

自签名证书


您也可以决定不使用像mkcert这样的本地证书颁发机构,而是自己签署证书。这种方法有几个陷阱:

  • 浏览器不信任您作为证书颁发机构,因此会显示需要手动绕过的警告。在Chrome中,您可以使用#allow unsecurity localhost标志在localhost上自动绕过此警告。
  • 如果你在一个不安全的网络中工作,这是不安全的。
  • 这并不一定比使用像mkcert这样的本地CA更容易或更快。
  • 自签名证书的行为与受信任证书的行为不完全相同。
  • 如果您没有在浏览器上下文中使用此技术,则需要禁用服务器的证书验证。忘记在生产中重新启用它会导致安全问题。

警告浏览器的屏幕截图显示何时使用自签名证书。
当使用自签名证书时,浏览器会显示警告。
如果您没有指定证书,React和Vue的开发服务器HTTPS选项会在后台创建一个自签名证书。这很快,但它也带有相同的浏览器警告和自签名证书的其他陷阱。幸运的是,您可以使用前端框架的内置HTTPS选项,并指定使用mkcert或类似方法创建的本地可信证书。有关更多信息,请参阅带有React的mkcert示例。

为什么浏览器不信任自签名证书?


如果您使用HTTPS在浏览器中打开本地运行的网站,浏览器会检查本地开发服务器的证书。当它看到你自己签署了证书时,它会检查你是否注册为受信任的证书颁发机构。因为你不是,所以你的浏览器无法信任该证书,并且它会显示一条警告,告诉你你的连接不安全。如果继续,它仍然会创建HTTPS连接,但这样做的风险自负。

为什么浏览器不信任自签名证书:一个图表。
为什么浏览器不信任自签名证书。


由正规证书颁发机构签署的证书


您也可以使用由官方CA签署的证书。这会带来以下复杂情况:

与使用mkcert这样的本地CA技术相比,您还有更多的设置工作要做。
您需要使用您控制的有效域名。这意味着您不能将官方CA用于以下用途:

  • localhost和其他保留域名,如example或test。
  • 任何你无法控制的域名。
  • 无效的顶级域。有关详细信息,请参阅有效顶级域的列表。


反向代理


使用HTTPS访问本地运行的站点的另一个选项是使用反向代理(如ngrok)。这会带来以下风险:

  • 与您共享反向代理URL的任何人都可以访问您的本地开发网站。这有助于将您的项目演示给客户,但也会让未经授权的人共享敏感信息。
  • 一些反向代理服务会收取使用费,因此定价可能是您选择服务的一个因素。
  • 浏览器中的新安全措施可能会影响这些工具的工作方式。


Flag (not recommended)


如果你在Chrome中使用自定义主机名,比如mysite.example,你可以使用一个标志来强制浏览器考虑mysite.exexample的安全性。由于以下原因避免这样做:

  • 您需要100%确保mysite.example始终解析为本地地址。否则,就有泄露生产凭据的风险。
  • 此标志仅适用于Chrome,因此无法跨浏览器进行调试。

非常感谢所有评论家和贡献者的贡献和反馈,尤其是Ryan Slevi、Filippo Valsorda、Milica Mihajlija和Rowan Merewood。🙌

文章链接

标签