私が構築している単純なiOSアプリケーション用にGoogle Translate APIを使用しようとしています。私は本質的にこの要求にSSLを使用しようとしています。iOSでSSLリクエストを実行する
Google Translate API, it supports SSLによると、だから今私の質問は私もこれを行う方法ですか?ここに私が今試みているいくつかのコードがあります。翻訳APIのAPIがあります。私はNSURLSession
(代わりのNSURLConnection
)を使用していますので、
func translateRequest(text: String, fromLang: String, toLang: String) {
let httpsURL = NSURL(string: "https://www.googleapis.com/language/translate/v2?key=<MYAPIKEYHERE>&source=\(fromLang)&target=\(toLang)&q=\(text)&format=text")
let sessionConfiguration = NSURLSessionConfiguration.defaultSessionConfiguration()
sessionConfiguration.timeoutIntervalForRequest = NSTimeInterval(10)
let session = NSURLSession(configuration: sessionConfiguration, delegate: self, delegateQueue: nil)
let translateTask = session.dataTaskWithURL(httpsURL!, completionHandler: completionHandlerTranslate)
translateTask.resume()
}
func completionHandlerTranslate(dataOpt: NSData?, responseOpt: NSURLResponse?, errorOpt: NSError?) {
// A helper function to do something with responses
}
は今、私はまたNSURLSessionDelegate
で私のコントローラを持っています。 Apple's docs(認証の設定のセクション)によると、NSURLSession
の場合、私はdidReceiveChallenge
機能を実装する必要があります。関数のシグネチャは次のとおりです。
func URLSession(session: NSURLSession, didReceiveChallenge challenge: NSURLAuthenticationChallenge, completionHandler: (NSURLSessionAuthChallengeDisposition, NSURLCredential?) -> Void) {
}
しかし、私はそこにどのように入るべきか分かりません。私はサーバーなどを検証しようとしている人々の例をたくさん見てきましたが、私はまだ混乱しています。
ここに私の質問は以下のとおりです。
- SSLはデータを暗号化するために使用されているので、どのような私は、クライアントとサーバーの間で発生する暗号化通信のために
didReceiveChallenge
で行う必要があるのですか? didReceiveChallenge
がCharlesProxyのようなプロキシを配置してデータを盗聴しようとするなど、他の証明書をすべて拒否するにはどうすればよいですか?
SSL(つまりTLS 1。2)を使用すると、通信を暗号化するために何もする必要はありません。それは暗号化されています。 SSLプロキシを有効にするために管理者権限を使用しているので、チャールズだけが表示されています。しかし、誰かがそれをすることができないようにするという観点から、http://security.stackexchange.comに質問を投稿してみてください。 – Rob