iOS9에서 "SSL 오류가 발생했으며 서버에 대한 보안 연결을 설정할 수 없습니다"오류가 발생합니다.
iOS 9로 기존 프로젝트를 업그레이드했기 때문에 계속 오류가 발생합니다.
SSL 오류가 발생하여 서버에 안전하게 연결할 수 없습니다.
iOS9의 경우 Apple은 App Transport Security (ATS) 의 일환으로 iOS 앱의 모든 보안되지 않은 HTTP 트래픽을 비활성화하는 iOS 9로 급진적 인 결정을 내 렸습니다 .
ATS를 비활성화하려면 Info.plist 를 열고 다음 줄을 추가 하여이 단계를 수행 할 수 있습니다 .
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
임의로드 ( NSAllowsArbitraryLoads = true
)를 허용 하는 것이 좋은 해결 방법이지만 ATS를 완전히 비활성화하는 것이 아니라 허용하려는 HTTP 연결을 활성화해야합니다.
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>yourserver.com</key>
<dict>
<!--Include to allow subdomains-->
<key>NSIncludesSubdomains</key>
<true/>
<!--Include to allow HTTP requests-->
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<!--Include to specify minimum TLS version-->
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
</dict>
</dict>
</dict>
iOS 9에서는 HTTPS를 사용하는 연결을 TLS 1.2로 설정하여 최근의 취약점을 방지합니다. iOS 8에서는 암호화되지 않은 HTTP 연결도 지원되었으므로 이전 버전의 TLS도 문제를 일으키지 않았습니다. 해결 방법으로 다음 코드 조각을 Info.plist에 추가 할 수 있습니다.
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
* ATS (App Transport Security) 참조
특정 도메인을 대상으로하는 경우 응용 프로그램의 Info.plist에 다음을 추가 할 수 있습니다.
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>example.com</key>
<dict>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
</dict>
iOS 9.0.2가 유효한 HTTPS 엔드 포인트에 대한 요청을 중단하는 것으로 보입니다. 내 현재 의심은 SHA-256 인증서가 필요 하거나이 오류로 실패한다는 것입니다.
재현하려면 safari로 UIWebView를 검사하고 임의의 HTTPS 끝점으로 이동해보십시오.
location.href = "https://d37gvrvc0wt4s1.cloudfront.net/js/v1.4/rollbar.min.js"
// [Error] Failed to load resource: An SSL error has occurred and a secure connection to the server cannot be made. (rollbar.min.js, line 0)
이제 Google로 이동하십시오 (물론 SHA-256 인증서가 있기 때문입니다).
location.href = "https://google.com"
// no problemo
Adding an exception to transport security (as outlined by @stéphane-bruckert's answer above) works to fix this. I also assume that completely disabling NSAppTransportSecurity
would work too, though I've read that completely disabling it can jeopardize your app review.
[EDIT] I've found that simply enumerating the domains I'm connecting to in the NSExceptionDomains
dict fixes this problem, even when leaving NSExceptionAllowsInsecureHTTPLoads
set to true. :\
The problem is the ssl certificate on server side. Either something is interfering or the certificate doesn't match the service. For instance when a site has a ssl cert for www.mydomain.com while the service you use runs on myservice.mydomain.com. That is a different machine.
I get the same error when I specify my HTTPS URL as : https://www.mywebsite.com . However it works fine when I specify it without the three W's as : https://mywebsite.com .
Xcode project -> goto info.plist and Click + Button then Add (App Transport Security Settings)Expand, Allow Arbitrary Loads Set YES. Thanks
My issue was NSURLConnection
and that was deprecated in iOS9 so i changed all the API to NSURLSession
and that fixed my problem.
NSURLConnection deprecated in iOS9
In my case I faced this issue in my simulator because my computer's date was behind of current date. So do check this case too when you face SSL error.
'programing tip' 카테고리의 다른 글
ValueError를 발생시키는 방법? (0) | 2020.08.19 |
---|---|
UITableView에 didSelectRowAtIndexPath 또는 prepareForSegue 메소드를 사용 하시겠습니까? (0) | 2020.08.19 |
matplotlib : 이미지에 직사각형을 그리는 방법 (0) | 2020.08.19 |
받은 편지함에 도달하기 전에 Android에서 SMS를 삭제할 수 있습니까? (0) | 2020.08.19 |
Pandas의 DataFrame에 필요한 메모리 양을 추정하는 방법은 무엇입니까? (0) | 2020.08.19 |