如果我复制了这个问题,我提前道歉。我正在开发一个与 .local 域上的 API 通信的移动应用程序。我一直在尝试建立安全连接(使用 Alamofire)。我尝试按照 Alamofire wiki 的建议编写自定义 ServerTrustPolicy,并包含我的证书链,但它总是失败。让应用程序连接的唯一方法是在 .plist 文件中配置应用程序传输安全性并将域添加为例外。有没有人有使用 .local 域的 alamofire 证书的经验?非常感谢任何建议。先感谢您。
这是我的 Alamofire.Manger:
静态让 sharedInstance: Manager = {
var apiObject = ApiBaseService()
//let domainName = apiObject.getDomain()
let pathToCert = NSBundle.mainBundle().pathForResource("certca", ofType: "der")
let localCertificate:NSData = NSData(contentsOfFile: pathToCert!)!
let serverTrustPolicy = ServerTrustPolicy.PinCertificates(
certificates: ServerTrustPolicy.certificatesInBundle(),
validateCertificateChain: true,
validateHost: true
)
let value = GlobalConstants.APICallErrorLocations.actionsGetActions
let serverTrustPolicies: [String: ServerTrustPolicy] = [
"test.ex01.local": serverTrustPolicy
]
let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
configuration.HTTPAdditionalHeaders = Alamofire.Manager.defaultHTTPHeaders
configuration.timeoutIntervalForRequest = NSTimeInterval(12.0)
return Manager(configuration: configuration,
serverTrustPolicyManager: ServerTrustPolicyManager(policies: serverTrustPolicies))
}()
难道我做错了什么?
克里斯蒂安
编辑:
问题是我用这个命令发现的 TLS 版本是 v1.0:
openssl s_client -connect test.ex01.local:5000
更新 TLS 版本并在 ServerTrustPolicy 对象中包含证书链后,一切正常。
希望这对将来的人有所帮助。