# HTTPS 요청/응답의 SSL 오류

> Proxyman에서 "SSL Handshake Failed" 및 기타 SSL 오류를 해결하세요. Proxyman 인증서가 설치되어 있고 신뢰되는지 확인하고, SSL pinning이 원인인지 배제하세요.

## 1. 문제 {#1-problems}

* Proxyman 앱에서 HTTPS 트래픽이 보이지 않습니다.
* HTTPS 요청과 응답에서 SSL 오류가 발생합니다.
* Response 패널에 **SSL Handshake Failed** 또는 **Possible Certificate Pinning**이 표시됩니다.

![오류 코드 -9806과 함께 Client SSL Handshake Failed를 보여주는 Proxyman Response 패널](https://proxyman.com/docs/assets/Screen%20Shot%202020-04-25%20at%2019.52.38.png)

## 2. 해결 방법 {#2-solution}

SSL 핸드셰이크 실패의 원인은 여러 가지입니다. 아래 단계를 따라가며 문제를 찾아보세요.

## 2.1 모바일 기기 {#21-mobile-devices}

### iOS 기기 {#ios-device}

* [iOS 설정 가이드](https://proxyman.com/docs/ko/debug-devices/ios-device)를 따르세요 -> 기기에 Proxyman CA 인증서를 설치하고 신뢰했는지 확인하세요.
* 인기 앱(예: Facebook, Instagram, Apple, WhatsApp 등)을 가로채는 경우: 해당 앱은 SSL pinning으로 보호되어 있어 가로챌 수 없습니다.
* iOS 앱이 SSL pinning을 사용하지 않는지 확인하세요. 사용한다면 비활성화하세요.

### iOS 시뮬레이터 {#ios-simulator}

[iOS 시뮬레이터 설정 가이드](https://proxyman.com/docs/ko/debug-devices/ios-simulator)를 따르세요 -> 시뮬레이터에 Proxyman CA 인증서를 설치하고 신뢰했는지 확인하세요.

### Android 기기 {#android-device}

* [Android 기기 설정 가이드](https://proxyman.com/docs/ko/debug-devices/android-device)를 따르세요 -> 기기에 Proxyman CA 인증서를 설치하고 신뢰했는지 확인하세요.
* 5단계가 완료되었는지 확인하세요(도메인을 **res/xml/network\_security\_config.xml**과 **AndroidManifest.xml** 두 파일에 추가합니다).
* 소유하지 않은 Android 앱을 가로채려는 경우 -> 가로챌 수 없습니다 -> ❌

### Android 에뮬레이터 {#android-emulator}

* [Android 에뮬레이터 설정 가이드](https://proxyman.com/docs/ko/debug-devices/android-device/automatic-script-for-android-emulator)를 따르세요 -> 에뮬레이터에 Proxyman CA 인증서를 설치하고 신뢰했는지 확인하세요.
* 5단계가 완료되었는지 확인하세요(도메인을 **res/xml/network\_security\_config.xml**과 **AndroidManifest.xml** 두 파일에 추가합니다).
* 소유하지 않은 Android 앱을 가로채려는 경우 -> 가로챌 수 없습니다 -> ❌

### React Native 앱 {#react-native-app}

* 앱이 React Native 앱이라면 [React Native 가이드](https://proxyman.com/docs/ko/debug-devices/react-native)를 따르세요.

### Flutter {#flutter}

* [Flutter 설정 가이드](https://proxyman.com/docs/ko/debug-devices/flutter)를 따르세요.

위의 모든 단계를 시도하고 확인했는데도 SSL 오류가 발생하나요?

### https://google.com에서 오류 없이 HTTPS 요청/응답을 볼 수 있는지 확인하기 {#verify-that-youre-able-to-see-https-requestresponse-from-httpsgooglecom-without-any-errors}

1. 기기를 준비합니다.
2. 웹 브라우저를 엽니다(iOS에서는 Safari, Android에서는 Google Chrome).
3. **https://google.com**에 접속합니다.
4. macOS용 Proxyman에서 요청을 우클릭하고 이 도메인에 대해 **Enable SSL Proxying**을 선택합니다. 그런 다음 페이지를 새로 고칩니다.
5. HTTPS 응답이 보이는지 확인합니다.

#### ✅ 성공 {#-success}

1. https://google.com의 HTTPS 응답이 보인다면 인증서를 올바르게 설정한 것입니다 ✅
2. 문제는 앱에 있을 수 있습니다. 도메인이나 앱으로 다시 시도하세요 -> SSL 오류가 여전히 발생한다면 앱이 SSL pinning으로 보호되고 있을 가능성이 높습니다.
3. SSL pinning 문제가 아니라고 생각된다면 [GitHub](https://github.com/ProxymanApp/Proxyman/issues)에 이슈를 등록하세요(기기, OS 버전, 앱 이름 등을 함께 알려주세요).

#### ❌ 실패 {#-failed}

* 기기에 Proxyman 인증서가 제대로 설치되었거나 신뢰되지 않았을 가능성이 높습니다. [2.1 모바일 기기](https://proxyman.com/docs/ko/troubleshooting/get-ssl-error-from-https-request-and-response#21-mobile-devices) 섹션으로 돌아가 다시 따라 하세요.
* 모든 단계를 마쳤는데도 SSL 오류가 계속 발생한다면 [GitHub](https://github.com/ProxymanApp/Proxyman/issues)에 이슈를 등록하세요(기기, OS 버전, 앱 이름 등을 함께 알려주세요).

## 2.2 MacBook 또는 Windows PC {#22-macbook-or-windows-pc}

다음 환경에서 SSL 오류가 발생하는 경우:

* **Mac (MacBook, Mac mini, Mac Studio)** -> Mac에 인증서를 설치하고 신뢰하세요 -> [macOS 가이드](https://proxyman.com/docs/ko/debug-devices/macos)를 따르세요
* **Windows** -> Windows 기기에 인증서를 설치하고 신뢰하세요 -> [Windows 가이드](https://proxyman.com/docs/ko/proxyman-windows/install-certificate)를 따르세요
* Java -> [Java VM 가이드](https://proxyman.com/docs/ko/debug-devices/java)를 따르세요
* Firefox -> [Firefox 가이드](https://proxyman.com/docs/ko/debug-devices/firefox)를 따르세요
* Python -> [Python 가이드](https://proxyman.com/docs/ko/debug-devices/python)를 따르세요
* Ruby -> [Ruby 가이드](https://proxyman.com/docs/ko/debug-devices/ruby)를 따르세요

> **경고:** 일부 네트워킹 라이브러리(Ruby, NodeJS, Python, Golang)는 기본적으로 자체 서명 인증서를 신뢰하지 않습니다. 라이브러리가 인증서를 신뢰하도록 직접 설정해야 합니다.
>
> \=> 해결하려면 [Automatic Setup](https://proxyman.com/docs/ko/automatic-setup/automatic-setup)을 사용하세요. **Setup** -> **Automatic Setup…** -> **Open New Terminal…**을 열고, 그 터미널에서 스크립트를 실행하세요. 지원되는 NodeJS, Python, Ruby, Golang 라이브러리의 인증서 신뢰를 자동으로 설정합니다. 다른 라이브러리는 **"\<Your framework/library> self-signed certificate"**를 검색하세요.

## 2.3 SSL Pinning인가요? {#23-ssl-pinning}

* 앱에서 여전히 HTTPS 응답을 볼 수 없다면, 앱이 [SSL pinning](https://en.wikipedia.org/wiki/HTTP_Public_Key_Pinning)으로 보호되고 있을 가능성이 높습니다. SSL pinning은 MitM 도구가 콘텐츠를 보지 못하도록 막습니다. Facebook, Apple, Instagram, Messenger 등 대부분의 인기 앱이 이를 사용합니다.
* 앱에서 **SSL pinning**을 일시적으로 비활성화하고 다시 시도하세요.

SSL pinning에 대해 자세히 알아보세요: [iOS에서 SSL Pinning으로 중간자 공격 막기](https://www.kodeco.com/1484288-preventing-man-in-the-middle-attacks-in-ios-with-ssl-pinning)

> **노트:** 모든 방법을 시도했는데도 무엇이 잘못되었는지 확신이 서지 않나요? [GitHub 이슈](https://github.com/ProxymanApp/Proxyman/issues)를 등록해 주세요.
>
> 함께 알려주세요: Proxyman macOS/Windows, Proxyman 버전, iOS/Android 기기 등.

## 동영상 {#video}

[Video: Proxyman으로 HTTP 및 HTTPS 트래픽 캡처하기](https://proxyman.com/videos/capture-http-https-traffic) (25 seconds)

## 더 알아보기 {#learn-more}

* [SSL pinning을 우회할 수 있을까요?](https://proxyman.com/posts/2019-11-15-Can-we-bypass-ssl-pinning)
