当前位置:首页 >  站长 >  建站经验 >  正文

SSL证书链缺中间证书:为什么Chrome能打开而curl报错?原因与排查方法

 2026-11-03 13:59  来源: 互联网   我来投稿 撤稿纠错

  一键部署OpenClaw

手机端有用户反馈打不开,提示证书有问题。桌面Chrome打开同一个域名,地址栏是正常的小锁。curl跑一遍,报unable to get local issuer certificate。你换一台安卓机试,同样报错。iPhone上的Safari倒是正常,看起来跟客户端有关。

浏览器验证证书时会顺着签发关系往上找,服务器只发自己的证书,中间那张由浏览器自己去下载,这个机制叫AIA。桌面Chrome、Safari和Windows的信任库会顺着AIA补链,所以缺了也能过。Firefox不做这个补救。curl、Java、Android上的老版本、还有各类SDK不做这个补救,链断了就直接报错。服务器要发的是完整链,自己的证书在前,中间证书在后,根证书不用发,对方系统里本来就有。根证书在操作系统或者浏览器的信任库里,中间证书不在。签发机构一般会把它放在下载页,文件名带chain或者ca-bundle,下载后跟自己那张拼起来用。

证书链不完整还表现在另一些地方。微信内置浏览器、小程序请求、iOS上的部分版本,报错信息各不相同,有的是证书无效,有的是握手失败。同一张证书在电脑上好好的,在手机上出问题,先怀疑链。安卓上的okhttp对链的要求比系统浏览器严,缺一张就断。

openssl s_client的-connect参数填域名和443端口,后面加-showcerts,就能看到服务器发了几张证书。输出里每张以-----BEGIN CERTIFICATE-----开头,正常的应该有两张,只有一张就是缺中间证书。加上-servername参数指定SNI,多域名服务器上才测得准。输出里还有一个verify return code,0表示验证通过,20是unable to get local issuer certificate,21是unable to verify the first certificate。后两个都指向链不完整。

修复是把中间证书拼到服务器证书后面,顺序不能反。cat server.crt intermediate.crt > fullchain.crt,然后ssl_certificate指向fullchain.crt。中间证书从签发机构的仓库下载,别用别的站抓来的,版本要对得上。拼接前先确认两张证书都是PEM格式,里面是-----BEGIN CERTIFICATE-----开头的文本。DER格式是二进制,直接cat会得到一堆乱码,nginx加载时报PEM_read_bio_X509_AUX() failed,提示no start line。格式转换用openssl的x509命令,-inform DER指定输入格式。

顺序反了同样失败,报错跟缺证书差不多。拼完用openssl再跑,两张证书的subject和issuer要能接上,第一张的issuer等于第二张的subject。这个检查用两条命令做,openssl x509 -noout -subject -issuer分别看两张证书的字段,肉眼对一遍就行。

在线检测也能看,SSL Labs的测试报告里有一节chain issues,缺中间证书会明确写出来。这个检测从多个客户端视角验,比自己在一台机器上试全面。检测跑完要等几分钟,免费的公开报告会留在搜索结果里,介意的话用付费版或者本地脚本测。

换完证书链,curl和手机都正常了,桌面浏览器没有变化。证书这类问题按客户端分开测,只在一个浏览器上验证,很容易漏。安卓、iOS、curl、Java各测一次,都过才算修好。顺手把检测脚本存档,下次换证书照着跑一遍。

申请创业报道,分享创业好点子。点击此处,共同探讨创业新机遇!

相关标签
中间证书
ssl证书

相关文章

  • 证书颁发机构eMudhra的8张中间证书私钥泄露,别人能伪造任意域名的HTTPS证书了

    Cloudflare在10月19日约17点(UTC)察觉,8张eMudhra中间证书的私钥已经泄露。这些证书被浏览器和操作系统广泛信任。密钥强度不足,拿到它就能为任意域名签出被信任的证书,中途读取或改写加密流量。证书链是这样搭的:根证书预装在系统和浏览器里,根证书签发中间证书,中间证书再去签发具体站

    标签:
    ssl证书
  • 宝塔面板SSL证书续签失败,八成卡在80端口没放行

    Let'sEncrypt的证书有效期是90天,宝塔默认挂着一条自动续签的计划任务,到期前30天开始尝试。这条任务失败不弹窗、不发邮件,面板首页也看不出异常。等到证书真过期,表现先是从“您的连接不是私密连接”开始,接着公众号接口、支付回调、小程序校验这些必须走HTTPS的地方一起中断。更麻烦的是浏览器

  • 证书有效期从398天砍到47天:手动续证的时代正式结束

    2025年4月11日,CA/B论坛通过SC-081v3投票,消费者方苹果、谷歌、微软、Mozilla全票赞成,CA方25票赞成、0票反对、5票弃权。这不是一份倡议书,而是靠浏览器根信任强制执行的规则:CA不遵守就失去信任链。时间表已经过半。2026年3月15日起,新签发证书的上限200天(各家实际按

  • SSL 证书进入短周期时代,首批 200 天证书集中续期

    A5站长网9月18日消息,公开受信任的SSL证书,最长有效期正在分三个阶段被压缩。这一变化来自CA/BrowserForum通过的SC-081v3投票。2026年3月15日起,证书有效期已从398天缩短到200天;2027年3月15日起缩短到100天;2029年3月15日起只剩47天。域名与IP地址

    标签:
    ssl证书
  • SSL 证书过期与证书链不完整:openssl s_client 验证与续期监控

    证书过期这事,一旦发生就是全站级别的红色警告。浏览器直接拦截,访客看到的不是你的网站,是一屏吓人的安全提示。更气人的是它完全可以避免——免费证书加自动续期,配好了就再也不用管。Let'sEncrypt的证书有效期是90天,这个短期限是刻意设计的,目的是逼着大家把续期自动化。Certbot是它官方推荐

热门排行

信息推荐