自签发https证书,您的连接不是私密连接,详细了解此警告 net::ERR_CERT_AUTHORITY_INVALID

报错信息如下:

使用自签发https证书的站点,导入全局证书之后,chrome浏览器下访问时候,报错:
您的连接不是私密连接
攻击者可能会试图从 gitlab.test.com 窃取您的信息(例如:密码、消息或信用卡信息)。详细了解此警告
net::ERR_CERT_AUTHORITY_INVALID
开启增强型保护,获享 Chrome 的最高级别安全防护
gitlab.test.com 通常会使用加密技术来保护您的信息。Chrome 此次尝试连接到 gitlab.test.com 时,该网站发回了异常的错误凭据。这可能是因为有攻击者在试图冒充 gitlab.test.com,或者 Wi-Fi 登录屏幕中断了此次连接。请放心,您的信息仍然是安全的,因为 Chrome 尚未进行任何数据交换便停止了连接。

您目前无法访问 gitlab.test.com,因为此网站使用了 HSTS。网络错误和攻击通常是暂时的,因此,此网页稍后可能会恢复正常。

解决办法如下:

根据你提供的错误信息,以下是问题的核心:

- **错误代码**:`net::ERR_CERT_AUTHORITY_INVALID`
- **原因**:Chrome 认为你的 HTTPS 证书无效,因为它不是由受信任的证书颁发机构(CA)签发的。
- **HSTS 问题**:由于你的站点启用了 HSTS(HTTP Strict Transport Security),即使你尝试通过 HTTP 访问,浏览器也会强制使用 HTTPS,导致无法绕过证书验证。

以下是对问题的详细分析和解决方法:

---

### **1. 问题分析**

#### **(1) 自签发证书不被信任**
自签发的 HTTPS 证书默认不被操作系统或浏览器信任。即使你已经将证书导入到系统的全局信任库中,仍可能存在以下问题:
- 导入的证书格式不正确。
- 浏览器未正确加载系统信任库中的证书。
- 证书链不完整(缺少中间证书)。

#### **(2) HSTS 的影响**
HSTS 是一种安全机制,要求浏览器始终通过 HTTPS 访问指定的网站。如果证书无效,浏览器会直接阻止访问,而不会允许用户忽略警告。

#### **(3) Chrome 的缓存机制**
Chrome 会缓存证书状态和 HSTS 设置。即使你更新了证书或信任库,浏览器可能仍然使用旧的缓存数据。

---

### **2. 解决方法**

#### **(1) 确保证书格式正确**
- 确保你的自签发证书是有效的 PEM 格式文件,并包含完整的证书链(包括根证书和中间证书)。
- 如果你使用 `openssl` 生成证书,可以参考以下命令:
  ```bash
  # 生成私钥
  openssl genrsa -out ca.key 2048

  # 生成根证书
  openssl req -new -x509 -days 365 -key ca.key -out ca.crt \
      -subj "/C=CN/ST=YourState/L=YourCity/O=YourOrg/CN=MyCA"

  # 生成服务器私钥
  openssl genrsa -out server.key 2048

  # 生成证书签名请求 (CSR)
  openssl req -new -key server.key -out server.csr \
      -subj "/C=CN/ST=YourState/L=YourCity/O=YourOrg/CN=gitlab.test.com"

  # 使用根证书签发服务器证书
  openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt
  • 将生成的 ca.crtserver.crt 文件配置到你的 Web 服务器中。

(2) 导入证书到系统信任库

确保你已正确将根证书(ca.crt)导入到操作系统的全局信任库中。以下是不同操作系统的具体步骤:

Windows 系统
  1. 双击 ca.crt 文件,打开“证书管理器”。
  2. 点击“安装证书”,选择“本地计算机”。
  3. 在“证书存储”页面,选择“将所有的证书放入下列存储”,然后选择“受信任的根证书颁发机构”。
  4. 完成安装后,重启 Chrome。
macOS 系统
  1. 双击 ca.crt 文件,打开“钥匙串访问”。
  2. 找到你的证书,右键点击并选择“获取信息”。
  3. 展开“信任”部分,将“使用此证书时”设置为“始终信任”。
  4. 关闭窗口并输入密码确认。
  5. 重启 Chrome。
Linux 系统
  1. ca.crt 文件复制到 /usr/local/share/ca-certificates/ 目录:
    sudo cp ca.crt /usr/local/share/ca-certificates/my-ca.crt
    
  2. 更新证书存储:
    sudo update-ca-certificates
    

(3) 清除 Chrome 的缓存

即使你已导入证书,Chrome 可能仍然缓存了旧的状态。需要清除缓存以确保浏览器重新加载证书信息:

  1. 打开 chrome://net-internals/#hsts
  2. 在“Delete domain security policies”中输入你的域名(如 gitlab.test.com),然后删除。
  3. 重启 Chrome。

(4) 禁用 HSTS(仅限临时测试)

如果你在开发环境中,可以通过以下方法临时禁用 HSTS:

  1. 在 Chrome 地址栏输入 chrome://flags/
  2. 搜索 HSTS,找到相关选项并将其禁用。
  3. 重启 Chrome。

注意:这种方法仅适用于测试环境,切勿在生产环境中禁用 HSTS。

(5) 使用开发者模式忽略警告(临时解决方案)

如果以上方法都无法解决问题,可以尝试手动忽略警告:

  1. 在 Chrome 中访问 https://gitlab.test.com
  2. 点击地址栏左侧的“不安全”提示。
  3. 选择“高级”,然后点击“继续前往 gitlab.test.com(不安全)”。

注意:这种方法仅适用于临时测试,且存在安全风险。


3. 验证配置

完成上述步骤后,验证证书是否被正确识别:

  1. 在 Chrome 中访问 https://gitlab.test.com
  2. 点击地址栏左侧的锁图标,查看证书信息。
  3. 确保证书显示为“受信任”。

4. 推荐替代方案

如果你希望长期解决此问题,可以考虑以下替代方案:

(1) 使用免费的可信证书

使用 Let's Encrypt 提供的免费 HTTPS 证书。工具如 Certbot 可以帮助你快速申请和部署证书。

(2) 使用内网穿透工具

如果你的站点仅用于内部网络,可以使用内网穿透工具(如 Ngrok 或 Frp)来提供 HTTPS 支持,而无需自己配置证书。


5. 总结

通过以上方法,应该能够解决 net::ERR_CERT_AUTHORITY_INVALID 错误,并让 Chrome 正常访问你的站点。如果仍有问题,请提供更多上下文信息(如操作系统、Web 服务器类型等),如果有问题,再进一步分析原因,和解决问题。

posted @ 2025-04-02 08:48  念槐聚  阅读(1010)  评论(0)    收藏  举报