让Chrome信任自签名证书

让Chrome信任自签名证书(Unix系列OS)

背景

想在本地测试自己写的基于HTTPS连接的Web应用,跑在3001端口。但使用Chrome浏览器访问https://localhost:3001时显示连接不安全。

解决了但没解决

使用mkcert一键创建证书:

bash 复制代码
mkcert localhost 127.0.0.1

在当前目录下生成两个文件:localhost+1-key.pemlocalhost+1.pem ,这里面+1表示附加1个SAN 条目(127.0.0.1)。

然后将本机mkcert添加到系统信任的根证书颁发机构:

bash 复制代码
mkcert --install

控制台显示

复制代码
Created a new local CA 💥
Sudo password: (因为要修改系统信任,需要sudo权限)
The local CA is now installed in the system trust store! ⚡️

Mac用户可以在~/Library/'Application Support'/mkcert/中找到两个新生成的根证书rootCA-key.pemrootCA.pem ,并且在 钥匙串访问-系统钥匙串-系统 找那个看到一个新的证书mkcert 本机名

【温馨提示】Mac的Finder默认隐藏Library文件夹,可以从 前往-前往文件夹... 中输入~/Library/'Application Support'/mkcert/进入该文件夹。

双击rootCA.pem文件可进入 钥匙串访问 应用。

在服务器端代码中,使用

js 复制代码
const key = await readFile("./certs/localhost+1-key.pem");
const cert = await readFile("./certs/localhost+1.pem");

const httpsServer = createServer({
    key,
    cert
},(req, res)=>{});

根据别人的教程,到这问题就该解决了。但当我再使用Chrome浏览器访问https://localhost:3001时,仍然显示连接不安全。清除浏览器缓存没有用,检查浏览器信任证书也没有问题。

最终解决

再问Grok怎么为localhost生成自签名证书,发现它教我的命令中多了一个::1

bash 复制代码
mkcert localhost 127.0.0.1 ::1

这个::1是IPv6的本地回环地址。该命令执行后生成两个文件localhost+2-key.pemlocalhost+2.pem

在服务器代码中将localhost+1-key.pem, localhost+1.pem替换为localhost+2-key.pem, localhost+2.pem,再从浏览器中访问https://localhost:3001,就不会显示连接不安全了。

溯源

但为什么我的证书中已经签给了localhost,访问的也是localhost,但它非要验证IPv6证书的安全性呢?

打开浏览器的开发者工具,重加载页面,看 网络-请求-远程地址 栏目,发现当我们请求访问localhost的时候,浏览器默认将localhost解析为了IPv6的回环地址。(如果没有 远程地址 栏,可以通过 右键请求-标头选项 添加 远程地址)

主流浏览器(如 Chrome、Firefox、Edge)通常遵循操作系统的地址解析优先级。如果 localhost 解析到 ::1 且系统支持 IPv6,浏览器可能会首先尝试通过 ::1 连接。

相关推荐
To_OC5 小时前
写了三遍 Todo List,我终于搞懂了 React 父子组件到底怎么通信
前端·javascript·react.js
勇往直前plus6 小时前
Vue3(篇一) 核心概念——响应式模板语法与组件基础
前端·javascript·vue.js
咩咩啃树皮6 小时前
第43篇:Vue3计算属性(computed)完全精讲——缓存机制、依赖计算、业务最优解
前端·vue.js·缓存
徐小夕8 小时前
花了一周,3亿tokens,我开源了一款 Word 文档智能审查平台,文稿自动质检+可视化分析,告别低效人工审核
前端·算法·github
kyriewen9 小时前
别再乱用useEffect了——你写的10个里有8个不该存在
前端·javascript·react.js
Ivanqhz9 小时前
Rust &‘static str浅析
java·前端·javascript·rust
IT_陈寒10 小时前
SpringBoot这个分页坑,我踩了三天才爬出来
前端·人工智能·后端
颜酱10 小时前
05 | 召回前置准备:根据业务数据库生成各数据库(读取配置阶段)
前端·人工智能·后端
zandy101110 小时前
衡石 Agentic BI的ReAct 推理框架在 Agentic BI 中的工程化实践
前端·javascript·react.js
罗超驿10 小时前
JavaEE进阶之路:从Web架构原理到HTML标签全解析
前端·html·web·javaee