Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 안드로이드 바로가기
- 스위프트 웹뷰
- 안드로이드 숏컷
- 안드로이드 앨범
- 스위프트 앨범
- Flutter UIKitView MethodChannel
- swift 문자
- swift sms
- 플러터 뷰 컨트롤러
- flutter rotate
- FlutterView MethodChannel
- Flutter NativeView
- Swift flutterviewcontroller
- NotificationService Extension
- 안드로이드 FCM
- Swift flutterview
- native flutter view
- 스위프트 테이블 뷰 셀
- 스위프트 UserDefaults
- 노티피케이션 익스텐션
- 안드로이드 에러
- 앱 백그라운드 푸시 데이터 저장
- flutter 회전
- swift autolayout
- 스위프트
- 앱 꺼졌을 때 푸시 데이터 저장
- silent push
- 스위프트 카메라
- 푸시 데이터 저장
- 스위프트 푸시
Archives
- Today
- Total
Things take time
[SWIFT] Https 인증서 관련 우회 방법(Webview, API(Http통신/Alamofire) 본문
[개요]
웹뷰를 통해 Https로 된 페이지, 도메인을 열 때 해당 인증서가 사설 인증서라면 웹뷰에서 경고를 날린다. 이는 웹뷰 로드 뿐 아니라, URLSession이나 Http통신 라이브러리인 Alamofire도 동일하다.
이때, 특정 Host값을 비교하여 해당 Host일 경우 인증서를 체크하지 않고 통과하도록 한다.
[웹뷰]
단순한 페이지 이동을 할때 WKWebview사용 시, WKNavigationDelegate를 상속받았다면 아래와 같은 함수로 처리 가능하다.
func webView(_ webView: WKWebView, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
print("[Gyeom] Https Host : \(challenge.protectionSpace.host)")
if challenge.protectionSpace.host.contains("g-y-e-o-m"){
let urlCredential = URLCredential(trust: challenge.protectionSpace.serverTrust!)
completionHandler(.useCredential, urlCredential)
}else{
completionHandler(.performDefaultHandling, nil)
}
}
print를 통해 확인해보고, 통과해야할 경우 if문 처럼 사용할 것
[URLSession]
URLSession을 통해 Http통신을 할경우(API 통신 등), 그리고 URLSessionDelegate를 상속받았다면 아래와 같은 함수로 처리 가능하다.
func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
if challenge.protectionSpace.host.contains("g-y-e-o-m"){
let urlCredential = URLCredential(trust: challenge.protectionSpace.serverTrust!)
completionHandler(.useCredential, urlCredential)
}else{
completionHandler(.performDefaultHandling, nil)
}
}
[Alamofire]
만약 통신관련 함수를 URLSession이 아닌 Alamofire를 사용하여 하고 있다면 아래와 같이 처리 가능하다.
let delegate: Alamofire.SessionDelegate = alamofire.delegate
delegate.taskDidReceiveChallengeWithCompletion = {
(session, task, challenge, completionHandler) in
print("[Gyeom] taskDidReceiveChallengeWithCompletion : \(challenge.protectionSpace.host)")
if challenge.protectionSpace.host.contains("g-y-e-o-m"){
print("[Gyeom] Go pass")
let urlCredential = URLCredential(trust: challenge.protectionSpace.serverTrust!)
completionHandler(.useCredential, urlCredential)
}else{
completionHandler(.performDefaultHandling, nil)
}
}
'iOS (기능)' 카테고리의 다른 글
[SWIFT] NotificationService Extension사용하기, Remote Notification(Silent Push)대신 사용하기, 백그라운드 푸시, 푸시 데이터 저장하기 (0) | 2022.06.08 |
---|---|
[SWIFT] URL형식으로 된 String에서 Parameter 추출 (0) | 2021.11.19 |
[SWIFT] 오디오 감지를 위한 옵저버 AVSystemController_SystemVolumeDidChangeNotification 사용 불가(iOS15) (1) | 2021.07.05 |
[SWIFT] CornerRadius 상단, 하단 특정 위치에만 주기 (0) | 2021.06.23 |
[iOS] 라이브러리 현재 버전 값 얻기 및 특정 버전 사용 방법 (0) | 2021.06.21 |