2016-06-16 10 views
0

Ich habe ein Problem beim Hochladen von Bildern in Amazon AWS. Hier ist mein Code:Ich erhalte ein Zertifikatfehler in Uplaoding Bild mit https Amazon AWS

import UIKit 

protocol ContentUploaderDelegate { 

    func onContentLoadComplete(status:Bool,serverResponse:String) 
} 


class ContentUploader 
{ 
    let contentURL = "https:<MY URL>amazonaws.com/api/v1/contents" 
    var delegate:ContentUploaderDelegate? 


    func uploadImage(image:UIImage,xAuth:String,mimeType:String,imageName:String) 
    { 
     let url = NSURL(string: contentURL) 

     let request = NSMutableURLRequest(URL: url!) 
     request.HTTPMethod = "POST" 

     let boundary = generateBoundaryString() 

     //define the multipart request type 
     request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type") 
     request.setValue(xAuth, forHTTPHeaderField: "x-auth-token") 
     request.setValue("application/json", forHTTPHeaderField: "accept") 

     let image_data = UIImageJPEGRepresentation(image, 1.0) 

     if(image_data == nil) 
     { 
      return 
     } 

     let body = NSMutableData() 

     //name to save in server 
     let fname = imageName 
     let mimetype = mimeType 

     //define the data post parameter 
     body.appendData("--\(boundary)\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) 
     body.appendData("Content-Disposition:form-data; name=\"test\"\r\n\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) 
     body.appendData("hi\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) 
     body.appendData("--\(boundary)\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) 
     body.appendData("Content-Disposition:form-data; name=\"files\"; filename=\"\(fname)\"\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) 
     body.appendData("Content-Type: \(mimetype)\r\n\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) 
     body.appendData(image_data!) 
     body.appendData("\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) 
     body.appendData("--\(boundary)--\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) 
     //set the HTTPBody 
     request.HTTPBody = body 

     let session = NSURLSession.sharedSession() 

     let task = session.dataTaskWithRequest(request) { 
      (
      let data, let response, let error) in 

      guard let _:NSData = data, let _:NSURLResponse = response where error == nil else { 
       print("error") 
       self.delegate?.onContentLoadComplete(false, serverResponse: (error?.description)!) 
       return 
      } 

      let dataString = NSString(data: data!, encoding: NSUTF8StringEncoding) 
      print("success \(dataString)") 
      self.delegate?.onContentLoadComplete(true, serverResponse:dataString! as String) 
     } 

     task.resume() 
    } 

    private func generateBoundaryString() -> String 
    { 
     return "Boundary-\(NSUUID().UUIDString)" 
    } 

Die folgenden Delegatmethode nie aufgerufen wird. Was könnte der Grund sein?

func URLSession(session: NSURLSession, 
        task: NSURLSessionTask, 
        didReceiveChallenge challenge: NSURLAuthenticationChallenge, 
             completionHandler: (NSURLSessionAuthChallengeDisposition, NSURLCredential?) 
     -> Void) { 

     let protectionSpace = challenge.protectionSpace 

     let theSender = challenge.sender 

     if protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust { 
      if (challenge.protectionSpace.host == "ec2-52-36-216-81.us-west-2.compute.amazonaws.com") { 
       if let theTrust = protectionSpace.serverTrust{ 

        let theCredential = NSURLCredential(trust: theTrust) 

        theSender!.useCredential(theCredential, forAuthenticationChallenge: challenge) 

        return 
       } 
      } 
     } 
     theSender!.performDefaultHandlingForAuthenticationChallenge!(challenge) 

     return 
    } 
} 

Und ich erhalte den folgenden Fehler. Irgendeine Idee, warum Sie diesen Fehler bekommen?

Fehler Domain = NSURLErrorDomain Code = -1202 „Das Zertifikat für diesen Server ist ungültig. Sie könnten zu einem Server verbinden, die vorgibt zu sein‚.amazonaws.com‘, die Ihre vertraulich setzen könnten gefährdete Informationen. " Userinfo = {NSURLErrorFailingURLPeerTrustErrorKey =, NSLocalizedRecoverySuggestion = Möchten Sie wie eine Verbindung zum Server sowieso ?, _kCFStreamErrorDomainKey = 3, _kCFStreamErrorCodeKey = -9813, NSErrorPeerCertificateChainKey = {type = unveränderlich, count = 1, Werte = ( 0: .com i: www..com>)}, NSUnderlyingError = 0x7f9d42aedc10 {Fehler Domain = kCFErrorDomainCFNetwork-Code = -1202 "(null)" Userinfo = {_ kCFStreamPropertySSLClientCertificateState = 0, kCFStreamPropertySSLPeerTrust =, _kCFNetworkCFStreamSSLErrorOriginalValue = -9813, _kCFStreamErrorDomainKey = 3, _kCFStreamErrorCodeKey = -9813, kCFStreamPropertySSLPeerCertificates = {type = unveränderlich, Anzahl = 1, Werte = ( 0: .com i: www..com>)}}}, NSLocalizedDescription = Das Zertifikat icate für diesen Server ist ungültig. Sie könnten sich mit einem Server verbinden, der vorgibt, ".amazonaws.com" zu sein, was Ihre vertraulichen Informationen gefährden könnte., NSErrorFailingURLKey = https: //amazonaws.com/api/v1/contents, NSErrorFailingURLStringKey = https : //.amazonaws.com/api/v1/contents, NSErrorClientCertificateStateKey = 0}

Antwort

0
Error Domain=NSURLErrorDomain Code=-1202 "The certificate for this server is invalid. You might be connecting to a server that is pretending to be “.amazonaws.com” 

ich glaube, etwas mit dem gemeinsamen Namen „.amazonaws.com“

NSErrorFailingURLKey=https://amazonaws.com/api/v1/contents, 
NSErrorFailingURLStringKey=https://.amazonaws.com/api/v1/contents 
falsch ist

Die in der Fehlermeldung angezeigten URLs scheinen kein bekannter Endpunkt zu sein. Ich würde erwarten, etwas wie https://ec2-2-2-2-2.compute-1.amazonaws.com oder eine andere voll qualifizierte Domain dort zu sehen.

Die Fehlermeldung bestätigt dies auch. Sie verbinden einen Host, aber der Name auf dem Zertifikat stimmt nicht überein. Dies ist der Grund für den Fehler pretending to be “.amazonaws.com”.

Bestätigen Sie den korrekten Endpunkt und wie Ihr Code die vollständige URL bildet.

Die folgende Delegate-Methode wird nie aufgerufen. Was könnte der Grund sein?

Der Fehler tritt auf, bevor die Funktion aufgerufen wird. Die Sitzung wird aufgrund des Zertifikatfehlers nie eingerichtet.

+0

Die URL ist nur so etwas wie https://ec2-2-2-2-2.compute-1.amazonaws.com. – TechBee

+0

Ja, sollte es sein, aber Ihr Code erzeugt keine gültige URL. Daher der Fehler. –

+0

Sehen Sie sich den NSErrorFailingURLStringKey-Wert in der Fehlermeldung an. Es ist keine gültige URL –