前言
使用 acme创建的免费证书,小程序无法使用,考虑不是免费域名导致的问题,因为大多数开发者正常使用。
问题复现
{"errno":600001,"errMsg":"request:fail errcode:-202 cronet_error_code:-202 error_msg:net::ERR_CERT_AUTHORITY_INVALID"}
request:fail errcode:-202 cronet_error_code:-202 error_msg:net::ERR_CERT_AUTHORITY_INVALID
问题分析
- nginx配置错误
- 证书链不完整
- 证书过期
解决方案
- 通过 亚数信息-SSL/TLS安全评估报告 网站进行检测。一般来讲 评级为 A 为正常。请确认你的 nginx 配置是否正确。
以下是一段 nginx 的域名 ssl 证书配置:
ssl_certificate /*/nginx/cert/*.com.cert;
ssl_certificate_key /*/nginx/cert/*.com.key;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 1m;
- 证书链不完整(2种解决方案)
- 访问 证书链下载/证书链修复 输入你的域名,开始证书链修复,修复后替换你的原秘钥文件(.pem OR .cer )
- 使用 acem 签发的证书通常会有以下几个文件,不要直接使用 domain.cer ,请使用 fullchain.cer
证书链 = fullchain.cer = (ca.cer + domain.cer)
- 通过chrom浏览器或者电脑查询证书有效期,查看过期时间
- 通过浏览器查看证书信息
- chrom: F12 + Security(安全)
问题总结
- 完整的证书链包括本级域名的证书以及相应颁发机构(CA)的证书信息。
- 浏览器只需要具备服务器证书和私钥即可进行认证,而小程序在认证过程中要求使用完整的证书链。
- 如果Nginx仅加载了本级域名的证书,而没有加载颁发机构的证书,这将导致证书链不完整。按照证书评级标准,该证书可能被评为B级。对于浏览器来说,可能会出现“不安全”的提示,尽管网页仍能正常访问。当小程序遇到这样的情况时会无法使用,要解决这个问题,请使用完整的证书链。