为本地服务器添加SSL证书,解决macOS端无继续访问选项的代码方案问题
解决方案
macOS Big Sur及以上版本对自签名证书的校验规则比Windows更严格,缺少强制要求的扩展字段的自签名证书会被直接标记为不可信任,不会提供手动继续访问的入口,以下两种代码/配置层面的方案可解决该问题,无需修改终端用户的浏览器设置:
方案1:更新自签名证书的生成配置(生产环境推荐)
你之前生成的自签名证书缺少macOS强制要求的扩展字段,重新生成证书时补充对应配置即可恢复「继续访问」入口,生成时需要满足以下规则:
- 证书有效期不能超过825天
- 必须配置
subjectAltName(SAN)字段,值为你的服务器IP地址 - 必须配置
extendedKeyUsage字段,值包含serverAuth - 必须配置
keyUsage字段,值包含digitalSignature和keyEncipherment
可直接使用以下openssl命令生成符合要求的证书,将命令中的192.168.1.100替换为你的服务器实际IP即可:
openssl req -x509 -newkey rsa:4096 -sha256 -days 398 -nodes \ -keyout server.key -out server.crt \ -subj "/CN=192.168.1.100" \ -addext "subjectAltName=IP:192.168.1.100" \ -addext "extendedKeyUsage=serverAuth" \ -addext "keyUsage=digitalSignature, keyEncipherment"
生成后替换服务器上原有的密钥和证书文件,重启服务即可生效。
方案2:Angular端添加协议降级逻辑(临时调试场景推荐)
如果你的场景允许使用HTTP协议访问服务,可以在Angular应用初始化阶段增加自动降级逻辑:
- 在App初始化provider的工厂函数中,先发起一次对服务器接口的HTTPS探测请求
- 如果请求返回证书相关错误,自动将后续所有接口请求的前缀切换为HTTP协议
- 同步在服务器端开启HTTP端口的访问权限即可,不需要修改证书配置
注意:HTTP协议传输存在数据泄露风险,仅推荐在本地局域网调试场景使用该方案。
内容的提问来源于stack exchange,提问作者R. Raut
相关产品推荐
相关产品推荐

