我正在使用Swift创建一个iOS应用程序,它与服务器连接。这是我用来上传图片的代码:
public class SendImages: NSObject,NSURLConnectionDelegate {
var user = UserInfo?()
var url = String?()
var urladditional = String?()
var sendImages: NSURLConnection = NSURLConnection()
var my_data:NSMutableData? = nil
var statusCode: NSInteger? = nil
public var delegate = SendImagesInterface?()
init(url: String) {
self.url = url
}
public func send(images_to_data: NSMutableArray ,user: UserInfo) {
var error : NSError?
var data_to_send : NSData = NSJSONSerialization.dataWithJSONObject(jsontoSend,
options: NSJSONWritingOptions(0), error: &error)!
var completeURL: AnyObject? = AnyObject?()
completeURL = NSURL(string: (self.url)!+(self.urladditional)!)
let cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalCacheData
var request = NSMutableURLRequest(URL: completeURL as NSURL, cachePolicy: cachePolicy, timeoutInterval: 30.0)
request.HTTPMethod = "POST"
request.HTTPBody = data_to_send
sendImages = NSURLConnection(request: request, delegate: self)!
self.my_data = NSMutableData()
}
func connection(connection: NSURLConnection!, didFailWithError error: NSError!) {
println("Error to connect with URL")
self.my_data = nil
}
func connection(connection: NSURLConnection!, didReceiveData data: NSData!) {
println("Receiving data")
self.my_data!.appendData(data)
}
func connection(connection: NSURLConnection, didReceiveResponse response: NSURLResponse) {
println("Receiving response headers")
var httpResponse = response as NSHTTPURLResponse
statusCode = httpResponse.statusCode
}
func connectionDidFinishLoading(connection: NSURLConnection!){
println("Conexion finished")
}
}
现在为了增加安全性,我想使用HTTPS连接。我怎样才能做到这一点?我有.der
格式的证书,我认为这是iOS使用的。
答案 0 :(得分:1)
要完成这项工作,您需要做的是通过$(".hamburger-menu").click(function(){
$(".two").toggleClass("two-rotate-back two-rotate");
$(".three").toggleClass("three-rotate-back three-rotate");
});
代理人电话NSURLCredential
回复。
基本步骤是:
URLSession(_:didReceiveChallenge:completionHandler:)
。CFDataRef
所需的证书中提取身份。NSURLCredential
一起使用,以创建SecIdentityCopyCertificate
。SecCertificateRef
NSURLCredential
醇>
此示例显示如何提取从捆绑包加载的证书的身份和信任:
init(identity:certificates:persistence:)
您必须记住一些事项,首先是证书能够过期。您应该知道,您可能需要更改证书,以便从一开始就为这种可能性做好准备。此外,您应该更喜欢struct IdentityAndTrust {
var identity:SecIdentityRef
var trust:SecTrustRef
}
func extractIdentity(certData:NSData, certPassword:String) -> IdentityAndTrust {
var identityAndTrust:IdentityAndTrust!
var securityError:OSStatus = errSecSuccess;
var items:Unmanaged<CFArray>?
var certOptions:CFDictionary = [ kSecImportExportPassphrase.takeRetainedValue() as String: certPassword ];
securityError = SecPKCS12Import(certData, certOptions, &items);
if securityError == 0 {
let certItems:CFArray = items?.takeUnretainedValue() as CFArray!;
let certItemsArray:Array = certItems as Array
let dict:AnyObject? = certItemsArray.first;
if let certEntry:Dictionary = dict as? Dictionary<String, AnyObject> {
let identityPointer:AnyObject? = certEntry["identity"];
let secIdentityRef:SecIdentityRef = identityPointer as SecIdentityRef!;
let trustPointer:AnyObject? = certEntry["trust"];
let trustRef:SecTrustRef = trustPointer as SecTrustRef;
identityAndTrust = IdentityAndTrust(identity: secIdentityRef, trust: trustRef);
}
}
return identityAndTrust;
}
而不是NSURLSession
,因为每个版本都会弃用越来越多的方法。
您可以找到一些如何处理证书并信任here的例子。