Mar*_*cus 42 ssl https ios swift
我正在尝试将我的iOS应用程序连接到HTTPS Rails应用程序,该应用程序当前在我的网络中的本地主机上运行.我可以通过浏览器访问该站点,https://myIP:3000/display
也可以在命令行中使用curl请求访问该站点.我正试图通过以下方式从我的应用访问它:
class FirstViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
//let url = NSURL(string: "https://another/Sinatra/website/feed")
let url = NSURL(string: "https://myIP:3000/display")
let request = NSURLRequest(URL: url!)
let task = NSURLSession.sharedSession().dataTaskWithURL(url!)
task!.resume()
}
Run Code Online (Sandbox Code Playgroud)
当我尝试访问sinatra网站时,我没有遇到任何麻烦,甚至可以使用正确的命令将JSON打印到控制台.但是,当我将URL设置到我的Rails网站时,我收到以下错误.
NSURLSession/NSURLConnection HTTP加载失败(kCFStreamErrorDomainSSL,-9813)
另外,我可以告诉我的localhost Rails应用程序(在另一台机器上)没有从iOS应用程序中获取,但是从浏览器和curl命令中进行了ping操作.
任何想法如何解决这一问题?
Ant*_*ine 42
如果我理解得很好,Apple现在希望开发人员使用HTTPS和TLS 1.2进行网络呼叫.
临时,您可以在"Info.plist"文件中添加:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
Run Code Online (Sandbox Code Playgroud)
只需查看此链接,它也可以为您提供帮助:http://ste.vn/2015/06/10/configuring-app-transport-security-ios-9-osx-10-11/
-
更新:根据一些评论,上述解决方案不再有效.这是一个更新的解决方案.
Info.plist
文件.Dictionary
和Key App Transport Security Settings
.Boolean
,Key Allow Arbitrary Loads
和Value YES
-
否则你可以设置Domain Exceptions
.这是怎么做的:
Info.plist
文件.Dictionary
和Key App Transport Security Settings
.Dictionary
和Key Exception Domains
.Dictionary
和Key The domain
.Boolean
和关键 NSExceptionAllowsInsecureHTTPLoads
和NSIncludesSubdomains
具有的价值来YES
.链接
https://forums.developer.apple.com/message/5857#5857
iOS 9 HTTP连接错误 - StackOverflow
Bri*_*ian 20
这是一个信任问题.使用自签名证书时,SSL的身份验证组件不起作用.仍然可以建立一个安全连接,以便没有人在窃听,但应用程序无法确定谁在另一端.
我有类似的设置,并通过将我自签名的根CA添加到iPad可信证书来解决此问题.此根CA用于签署我的所有其他开发证书.然后我只需要在任何可以使用SSL的地方添加这个单根证书.如果您只是拥有直接使用的自签名证书,则可以添加该证书.
要将证书放到设备(或模拟器)上,我将文件放在我的Web服务器上.然后只需通过普通HTTP在Safari中打开它.设置应用程序应该打开并询问您是否要信任该证书.
当然,这是假设这仅用于开发,并且您的生产系统具有由知名权威机构签署的证书(即,根证书颁发机构的OS数据库中包含的证书).因为要求最终用户安装自签名证书不会飞.
小智 6
这是唯一适用于我的解决方案...在AppDelegate.m文件的末尾,插入代码:
@implementation NSURLRequest(DataController)
+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host
{
return YES;
}
@end
Run Code Online (Sandbox Code Playgroud)
感谢jc ivancevich文章http://ivancevich.me/articles/ignoring-invalid-ssl-certificates-on-cordova-android-ios/
归档时间: |
|
查看次数: |
66403 次 |
最近记录: |