logo NodeSeekbeta

为什么脚本分享时候wget要带--no-check-certificate?

比如站内脚本贴置顶里面wget有些带上了 --no-check-certificate
据我所知,这个是关闭远程https网站的证书校验,但是这些脚本通常都是从 https://raw.githubusercontent.com 下载的,证书不可能有问题,关了只会降低安全性
有没有佬知道为什么这些远程下载执行的脚本wget必须关闭证书校验吗?我手动去掉一点问题都没有,但就是特别好奇为什么要带上 xhj001

  • 防止ssl过期吧

  • 因为有些低版本的小鸡没有正确安装或更新 ca-certificates ,遇到新证书认不出来

  • 怕遇上老爷爷系统?

  • 照顾老旧版本系统 还有时间不对的问题

  • 轻量的debian就不带ca-certificates,你d完系统连wget都没有

  • 除了 debian9 需要,其他几乎不用了。做脚本的适配所有场景

    以下是 chatGPT 的回复。
    这是一个很经典的 Debian 9(Stretch)时代遗留问题,核心原因是:

    👉 系统内置的 CA 根证书太旧,无法验证现在常见的 HTTPS 证书链

    我们拆开讲。


    ✅ 本质原因

    Debian 9 发布于 2017 年,它自带的:

    • ca-certificates
    • OpenSSL
    • GnuTLS

    版本都非常老。

    而现在大量网站:

    • 使用 Let's Encrypt 新链
    • 使用 ISRG Root X1
    • 使用 ECC 证书
    • 使用更新的中间证书链

    Debian 9 默认信任库里:

    👉 缺少或不完整包含这些新根证书

    结果就是:

    wget https://example.com
    

    会报:

    ERROR: cannot verify example.com's certificate
    

    所以你只能绕过验证:

    wget --no-check-certificate
    

    ✅ Debian 10+ 为什么没问题?

    Debian 10 (Buster, 2019) 以后:

    • 更新了 ca-certificates
    • 更新了 OpenSSL / GnuTLS
    • 默认已经包含 Let's Encrypt 新根

    因此 TLS 验证可以正常通过。


    ✅ 典型错误示例

    Debian 9 上常见:

    ERROR: The certificate of 'xxx.com' is not trusted.
    ERROR: The certificate of 'xxx.com' doesn't have a known issuer.
    

    ✅ 正确解决方案(不建议长期用 --no-check-certificate)

    🔹 方法一(推荐):更新 CA 证书

    apt update
    apt install --reinstall ca-certificates
    update-ca-certificates
    

    如果源还能用,这一步往往就解决。


    🔹 方法二:手动升级 ca-certificates

    apt install ca-certificates
    

    确认版本:

    dpkg -l ca-certificates
    

    应 ≥ 2021xx


    🔹 方法三:手动加入 ISRG Root X1

    wget https://letsencrypt.org/certs/isrgrootx1.pem
    cp isrgrootx1.pem /usr/local/share/ca-certificates/isrgrootx1.crt
    update-ca-certificates
    

    ✅ 为什么还能“连得上”却提示证书错误?

    TLS 分两步:

    1. 建立加密连接
    2. 验证对方身份

    Debian 9:

    ✔ 能加密
    ❌ 不认识颁发机构

    所以只是“身份不可信”。


    ⚠️ 为什么不建议长期用 --no-check-certificate?

    等于告诉 wget:

    谁给证书我都信

    风险:

    • 中间人攻击
    • 劫持下载
    • 文件被替换

    在自动化脚本里是安全隐患。


    ✅ 进阶判断:是不是 CA 过期导致

    测试:

    openssl s_client -connect google.com:443
    

    如果看到:

    Verify return code: 20 (unable to get local issuer certificate)
    

    就是证书库太旧。


    ✅ 终极建议

    如果这台 Debian 9 还能长期使用:

    👉 强烈建议升级系统到 Debian 11 / 12

    Debian 9 已 EOL,多数仓库也已迁移归档。


    🧠 一句话总结

    Debian 9 需要 --no-check-certificate 是因为它的根证书库太老,不认识现在互联网使用的新证书链;Debian 10+ 已更新证书库,所以不需要。


    如果你愿意,我可以教你一步一步把这台 Debian 9 的 CA 信任链修好,或者给你一套最小风险的证书补丁方案

  • 老系统怕出问题

你好啊,陌生人!

我的朋友,看起来你是新来的,如果想参与到讨论中,点击下面的按钮!

📈用户数目📈

目前论坛共有60098位seeker

🎉欢迎新用户🎉