Ios Alamofire 5请求服务器信任评估问题

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

我升级到Alamofire 5,现在在提出请求时遇到了问题:

“服务器信任评估失败,原因是:主机demo.mXXme.com需要ServerTrustEvaluation值,但未找到任何值。”

我用
禁用或
设置我的经理,方法如下:

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固定。