Ios Alamofire 5请求服务器信任评估问题
我升级到Alamofire 5,现在在提出请求时遇到了问题: “服务器信任评估失败,原因是:主机demo.mXXme.com需要ServerTrustEvaluation值,但未找到任何值。” 我用Ios Alamofire 5请求服务器信任评估问题,ios,swift,alamofire,Ios,Swift,Alamofire,我升级到Alamofire 5,现在在提出请求时遇到了问题: “服务器信任评估失败,原因是:主机demo.mXXme.com需要ServerTrustEvaluation值,但未找到任何值。” 我用禁用或设置我的经理,方法如下: let manager = Session(configuration: configuration, serverTrustManager: ServerTrustManager(evaluators: [ "demo.mXXme.com": DisabledEval
禁用或设置我的经理,方法如下:
let manager = Session(configuration: configuration, serverTrustManager: ServerTrustManager(evaluators: [ "demo.mXXme.com": DisabledEvaluator()]))
据我所知,disableor
应该禁用任何服务器信任检查。
但我还是有问题
有人知道如何让我的请求生效吗
提前感谢默认情况下,ServerTrustManager
要求所有主机都必须评估其信任。因此,如果您向ServerTrustManager
中没有的域发出请求,将产生此错误。这些主机字符串也区分大小写,因此如果域不完全匹配,它可能找不到匹配项。我建议先解决匹配问题,但您可以通过使用附加参数初始化ServerTrustManager
来禁用所有主机的所需评估:
ServerTrustManager(所有主机均已评估:false,
评估者:[“demo.mXXme.com”:DisableDemover())
但正如我所说的,您应该首先调查匹配问题。如果您使用的是通配符
,则需要使用Alamofire 5
创建ServerTrustManager
的子类:
class WildcardServerTrustPolicyManager: ServerTrustManager {
override func serverTrustEvaluator(forHost host: String) throws -> ServerTrustEvaluating? {
if let policy = evaluators[host] {
return policy
}
var domainComponents = host.split(separator: ".")
if domainComponents.count > 2 {
domainComponents[0] = "*"
let wildcardHost = domainComponents.joined(separator: ".")
return evaluators[wildcardHost]
}
return nil
}
}
然后,在实施过程中:
public lazy var session: Session = {
let configuration: URLSessionConfiguration = URLSessionConfiguration.default
configuration.timeoutIntervalForRequest = 300
let evaluators: [String: ServerTrustEvaluating] = [
"*.yourdomain.com": PinnedCertificatesTrustEvaluator()
]
let manager = WildcardServerTrustPolicyManager(evaluators: evaluators)
return Session(configuration: configuration, serverTrustManager: manager)
}()
现在,您可以为所有子域使用带有通配符的证书(*.example.com
)
有关更多信息:
你说得对,问题出在匹配的域中。我发现Alamofire默认情况下不处理通配符,因此主机*.mXXme.com
和demo.mXXme.com
不相等。这在我们的应用程序中不起作用。我还尝试了DefaultTrustEvaluator
,但没有用。看起来我必须做SSL固定。