OWASP网站只包含Objective-C和NSURLConnection的示例。
Swift 3+更新:
只需为nSurlSessionDelegate
定义一个委托类,并实现didReceiveChallenge函数(此代码改编自objective-c OWASP示例):
class NSURLSessionPinningDelegate: NSObject, URLSessionDelegate {
func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Swift.Void) {
// Adapted from OWASP https://www.owasp.org/index.php/Certificate_and_Public_Key_Pinning#iOS
if (challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust) {
if let serverTrust = challenge.protectionSpace.serverTrust {
let isServerTrusted = SecTrustEvaluateWithError(serverTrust, nil)
if(isServerTrusted) {
if let serverCertificate = SecTrustGetCertificateAtIndex(serverTrust, 0) {
let serverCertificateData = SecCertificateCopyData(serverCertificate)
let data = CFDataGetBytePtr(serverCertificateData);
let size = CFDataGetLength(serverCertificateData);
let cert1 = NSData(bytes: data, length: size)
let file_der = Bundle.main.path(forResource: "certificateFile", ofType: "der")
if let file = file_der {
if let cert2 = NSData(contentsOfFile: file) {
if cert1.isEqual(to: cert2 as Data) {
completionHandler(URLSession.AuthChallengeDisposition.useCredential, URLCredential(trust:serverTrust))
return
}
}
}
}
}
}
}
// Pinning failed
completionHandler(URLSession.AuthChallengeDisposition.cancelAuthenticationChallenge, nil)
}
}
(你可以在这里找到Swift 2的要点--从最初的答案)
openssl s_client -connect my-https-website.com:443 -showcerts < /dev/null | openssl x509 -outform DER > my-https-website.der
if let url = NSURL(string: "https://my-https-website.com") {
let session = URLSession(
configuration: URLSessionConfiguration.ephemeral,
delegate: NSURLSessionPinningDelegate(),
delegateQueue: nil)
let task = session.dataTask(with: url as URL, completionHandler: { (data, response, error) -> Void in
if error != nil {
print("error: \(error!.localizedDescription): \(error!)")
} else if data != nil {
if let str = NSString(data: data!, encoding: String.Encoding.utf8.rawValue) {
print("Received data:\n\(str)")
} else {
print("Unable to convert data to text")
}
}
})
task.resume()
} else {
print("Unable to create NSURL")
}
问题内容: 如何在Swift中将证书固定到NSURLSession? 该OWASP网站只包含Objective- C和NSURLConnection的一个例子。 问题答案: Swift 3+ 更新: 只需定义一个委托类并实现didReceiveChallenge函数( 此代码改编自Objective-c OWASP示例 ): (您可以在此处找到Swift 2 的Gist- 从初始答案开始) 然后使
目录 苹果开发帐号说明 苹果证书和X5打包服务器的配合使用 iOS证书申请教程 苹果证书和极光推送的配合使用 苹果开发帐号说明 个人账号(Individual)/公司团队账号 (Company/Organization): 费用都是99美金一年,两者无本质区别,都可以发布应用到苹果市场。 区别在于个人账号在App Store销售者只能显示个人的ID,比如san zhang,单人使用。公司团队账
1.自我介绍 2面向对象介绍一下 3.面向过程介绍 4.面向过程的场景及缺点 5.线程池作用(说了句避免线程创建的开销) 6.线程创建开销很大吗,需要哪些开销?线程竞争如何解决 7.c++11新特性有哪些 8.lambda表达式的捕获方式及lambda的一个使用场景 9.实习的工作及简单问了点问题,没为难我 10.项目或者实习哪个的收获最大 11.makefile构建多个c++程序你会如何设计提示
问题内容: 我有一个NSURLSession调用dataTaskWithRequest以这种方式发送POST请求 响应等于: 我的问题是我不知道如何获取名称为MYCOOKIEIS的“ Set-Cookie”中的cookie。 我将在用户登录时使用它,因此,如果用户未登录->登录(调用登录api),否则请转到主屏幕并调用其他API。 有人可以帮助我从那里拿走饼干吗? 问题答案: Swift呈现形式可
整体时长不到1h,和IOS相关的基本没有,体会到被吊打是一种什么样的感觉,很多问题说的语无伦次,八成又凉了。 自我介绍一下 介绍一下手写模板库这个项目 你实现的STL和标准模板库有什么不同 介绍一下集群聊天服务器这个项目 你提到了git,创建仓库到推送需要哪些命令? 提交和推送有什么不一样? 合并分支时发生冲突怎么办? 在学校学过什么专业课 介绍一下面向对象 为什么要有面向对象这个概念呢 面向对象
问题内容: 在集成到更大的应用程序之前,我正在尝试测试一个概念验证的命令行应用程序。我想要做的是使用此示例使用NSURLSession下载一些数据。但是,如果使用简单的OS X命令行应用程序中给出的示例,则该应用程序将在检索数据之前退出。 如何使用NSURLSession从独立的命令行应用程序下载数据?我所读的内容是使用NSRunLoop,但是我还没有在Swift中找到明确的示例,因此,如果NSR