此代码尝试访问在浏览器中工作的SSL URL,但失败:
let path = "https://localhost:8443/greeting"
let request = NSMutableURLRequest(URL: NSURL(string: path)!)
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in
let json:JSON = JSON(data: data!)
if let c = json["content"].string {
print(c)
}
})
task.resume()
失败,错误为:
可选(错误域=NSURLErrorDomain Code=-1200“发生SSL错误,无法与服务器建立安全连接。”用户信息={NSURLErrorFailingURLPeerTrustErrorKey=,
允许应用程序接受此证书需要什么?
有问题的证书是自签名的。阅读SO上的一些解决方案没有成功。
运行Xcode 7.2
4条答案
按热度按时间cyej8jka1#
@Ashish Kakkad说得很对。
在Info.plist文件中包含以下内容:
n1bvdmb62#
Sai Reddy的解决方案允许您接受具有完整链的自签名证书,但它也接受其他证书。
Marcus Leon的解决方案是完全重写--基本上忽略所有证书。
我更喜欢这个。
雨燕4.1,iOS 11.4.1
首先,在信息列表中:
其次,无论在何处使用NSURLSession,都不要使用URLSession.shared进行设置,而是使用类似以下的内容:
然后添加此类来处理固定:
此类检查您是否启用了证书固定。如果您启用了,它将完全忽略正常的证书验证,并与我们在应用中包含的证书进行精确比较。这样,它仅接受您的自签名证书,而不接受其他任何证书。
此解决方案要求您在项目中的Resources文件夹中放置一个“my_certificate_to_pin.der”文件。如果您还没有Resources文件夹,只需添加一个即可。
该证书应采用DER格式。
要为服务器创建自签名证书,通常需要执行以下操作:
这将生成两个文件--一个mycert.key私钥文件和一个mycert.cer-证书本身。这两个文件都是X509格式。对于iOS,您需要DER格式的证书,因此执行以下操作:
这将生成您在iOS上需要的文件。
pxiryf3j3#
你可以使用你自己的证书代替我的证书(fullchain.pem)
cclgggtu4#
雨燕5.1
我知道你找到了答案,但我有一个更短的方法,如果任何人whant可以使用它
您需要的扩展名:
和用法: