iOS 11中自签名证书安装及信任异常问题求助
嘿,我之前帮不少人解决过类似的内网自签证书适配iOS的问题,你的情况其实是iOS从11版本开始收紧了根CA证书信任规则导致的——Chrome能正常识别是因为它的证书校验逻辑和iOS系统完全独立,限制宽松很多。下面我给你拆解iOS对自签根CA的关键限制,以及针对你的情况的排查方向:
一、iOS 11+ 对自签根CA的核心信任限制
必须包含合法的扩展密钥用法(EKU)
iOS 11之后,只有具备特定EKU字段的根CA证书才会出现在「证书信任设置」里。如果你的根CA是用来签发内网HTTPS服务器证书的,那根CA证书必须至少包含:- Certificate Signing(OID: 1.3.6.1.5.5.7.3.3):证明这个CA有权签发其他证书
- Server Authentication(OID: 1.3.6.1.5.5.7.3.1):允许签发的证书用于HTTPS服务器认证
要是你的根CA缺了这些EKU,就算成功安装,系统也不会把它放到可信任的列表里。
签名算法必须符合安全标准
iOS 11彻底淘汰了SHA-1算法的证书,你的根CA和它签发的子证书必须使用SHA-256及以上的签名算法(比如SHA-256、SHA-384)。如果你的自签CA还是用SHA-1生成的,安装后肯定不会出现在信任设置里。证书有效期需符合规范
虽然iOS 13才引入了证书有效期不超过825天的限制,但iOS 11也会拒绝那些有效期异常的证书:比如起始日期早于设备当前时间太久(比如几年前),或者证书已经过期,这类证书安装后也不会被系统识别为可信任的根CA。安装时的Content-Type必须正确
如果你是通过网页安装DER格式的证书,服务器返回的HTTP响应头里Content-Type必须设置为application/x-x509-ca-cert。如果这个字段不对,iOS会把证书当成普通文件安装,而不是CA证书,自然不会出现在信任设置里。
二、针对你的情况的快速排查步骤
检查根CA的EKU和签名算法
用OpenSSL命令查看证书详情:openssl x509 -in your-ca.der -inform der -text -noout重点看
Signature Algorithm字段是不是sha256WithRSAEncryption(或更高),以及Extended Key Usage里有没有上面提到的两个OID。验证证书有效期
同样在上面的命令输出里,找到Validity部分,确认Not Before在当前时间之前,Not After在当前时间之后。检查网页安装的Content-Type
用curl命令访问你提供证书下载的网页,查看响应头:curl -I https://your-office-server/ca.der确保返回的
Content-Type是application/x-x509-ca-cert,如果不是,需要修改服务器的配置(比如Nginx、Apache的MIME类型设置)。
三、为什么Chrome能正常识别?
Chrome有自己独立的证书存储和校验机制,它不会完全依赖iOS系统的证书信任列表。只要你把根CA导入到Chrome的「设置>隐私和安全>安全>管理证书」里,Chrome就会信任由这个CA签发的证书,而不管iOS系统是否信任。
内容的提问来源于stack exchange,提问作者user2101976

