iOS 13 TLS问题

时间:2019-09-19 13:08:54

标签: objective-c xcode tls1.2 ios13

我已经安装了iOS 13 beta版并运行了包含很多网络请求的框架,但是出现了此错误:

2019-09-19 15:01:33.566811+0200 ---[395:25439] Connection 4: default TLS Trust evaluation failed(-9814)
2019-09-19 15:01:33.567022+0200 ---[395:25439] Connection 4: TLS Trust encountered error 3:-9814
2019-09-19 15:01:33.567110+0200 ---[395:25439] Connection 4: encountered error(3:-9814)
2019-09-19 15:01:33.569824+0200 ---[395:25439] Connection 4: unable to determine interface type without an established connection
2019-09-19 15:01:33.584952+0200 ---[395:25439] Task <D97FD611-0B48-4DCE-99C9-6A971E5E6524>.<4> HTTP load failed, 0/0 bytes (error code: -1202 [3:-9814])

我试图找出导致该问题的原因,但没有成功。谁能帮我吗?

2 个答案:

答案 0 :(得分:11)

Apple从iOS 13和macOS 10.15开始为TLS服务器证书定义了stricter rules

  

所有TLS服务器证书必须符合iOS 13和macOS 10.15中的这些新安全要求:

     

TLS服务器证书和使用RSA密钥的颁发CA必须使用密钥大小大于或等于2048位。使用RSA密钥大小小于2048位的证书不再受TLS信任。

     

TLS服务器证书和颁发CA必须在签名算法中使用SHA-2系列的哈希算法。不再信任SHA-1签名的证书。

     

TLS服务器证书必须在证书的“使用者备用名称”扩展名中显示服务器的DNS名称。证书的CommonName中的DNS名称不再受信任。

     

此外,在2019年7月1日之后颁发的所有TLS服务器证书(如证书的NotBefore字段中所示)必须遵循以下准则

     

TLS服务器证书必须包含包含id-kp-serverAuth OID 的ExtendedKeyUsage(EKU)扩展。

     

TLS服务器证书必须具有825天或更短的有效期(在证书的NotBefore和NotAfter字段中表示)。

最后一点:

  

违反这些新要求的TLS服务器连接将失败,并可能导致网络故障,应用程序失败以及网站无法在iOS 13和macOS 10.15的Safari中加载。

答案 1 :(得分:0)

我将添加一些其他信息。要检查您的证书是否有效,可以在“钥匙串访问”中打开它,并检查它是否包含正确的信息:

  • 它的到期时间少于825天;
  • 签名算法不是SHA-1(可能是SHA-256);
  • 公钥大小不小于2048位;
  • 具有用于“服务器身份验证”目的的扩展密钥用法扩展;
  • 有一个“主题备用名称”扩展名,其中包含服务器的DNS。

enter image description here

OpenSSL的配置示例:

[ ca ]
default_ca = CA_default
[ CA_default ]
default_md = sha256
default_days = 825
[ req ]
prompt             = no
default_bits       = 4096
distinguished_name = req_distinguished_name
x509_extensions     = req_ext
[ req_distinguished_name ]
countryName                = ...
stateOrProvinceName        = ...
localityName               = ...
organizationName           = ...
commonName                 = google.com
[ req_ext ]
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = google.com
DNS.2 = www.google.com

要生成新的密钥证书对,请运行以下命令:

openssl req -newkey rsa:4096 -nodes -keyout key.pem -x509 -out certificate.crt -days 825 -config config.cnf