# 프록시를 통한 SSL WRONG_VERSION_NUMBER 오류: 해결법

> [SSL: WRONG_VERSION_NUMBER] 오류는 보통 HTTP 프록시 포트에 https:// 프록시 URL을 쓴 경우입니다. Python과 Node의 간단한 해결책입니다.

- URL: https://crawlrelay.com/ko/docs/errors/ssl-wrong-version-number/
- 마지막 업데이트: 2026-10-13
- Publisher: CrawlRelay (https://crawlrelay.com)

클라이언트에서 TLS 오류: 각 도구에서 정확한 메시지, 가능한 원인들의 순서, 그리고 효과적인 해결 방법.

**빠른 답변 — 프록시에서 SSL: WRONG_VERSION_NUMBER는 무엇을 의미하나요?**

**[SSL: WRONG_VERSION_NUMBER]** 오류는 거의 항상 클라이언트가 평문으로 응답하는 곳과 TLS 핸드셰이크를 시도했을 때 발생합니다. 일반적으로 `https://` 프록시 URL이 평문 HTTP 프록시 포트를 가리킬 때 나타납니다. CrawlRelay에서는 HTTP와 HTTPS 대상 모두 게이트웨이 주소 앞에 `http://`를 씁니다; 사이트 자체의 HTTPS는 터널을 통해 여전히 작동합니다.

## SSL: WRONG_VERSION_NUMBER 한눈에 보기

| 속성 | 값 |
| --- | --- |
| 오류 | SSL: WRONG_VERSION_NUMBER |
| 유형 | 클라이언트에서 TLS 오류 |
| 전송 주체 | 상대편이 TLS를 사용하지 않을 때 TLS 라이브러리 오류 |
| 정의 위치 | TLS 1.3: RFC 8446; HTTP proxy CONNECT: RFC 9110, section 9.3.6 |
| 다시 시도할까요? | 아니요. 구성 오류입니다 |
| 먼저 확인하세요 | 프록시 URL 앞 스킴을 확인하세요 |

## SSL: WRONG_VERSION_NUMBER가 무엇을 의미하나요?

TLS는 핸드셰이크 레코드로 시작합니다. 응답이 HTTP라면 TLS 라이브러리는 이상한 버전 번호를 읽고 중단하며, Python은 `WRONG_VERSION_NUMBER` 오류를 발생합니다; OpenSSL 버전과 클라이언트에 따라 다릅니다.

프록시 URL 스킴이 클라이언트와 프록시 간 통신 방식을 결정합니다. `http://`는 프록시에 일반 HTTP로 접속하여 `CONNECT` 터널 후 사이트와 TLS를 진행합니다. `https://`는 프록시 자체와 TLS로 연결하는 방식이며, 프록시 포트가 이를 지원해야 합니다.

## Python, curl, Node.js, 브라우저에서 SSL: WRONG_VERSION_NUMBER는 어떻게 나타나나요?

같은 실패가 도구마다 다르게 출력됩니다. 로그에서 검색할 메시지들:

- **Python requests / urllib3 2.x:** `SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number'))`가 `ProxyError`로 감싸짐
- **httpx:** `httpx.ConnectError: [SSL: WRONG_VERSION_NUMBER] wrong version number`
- **curl:** 일반 프록시에 `-x https://`를 쓸 때 `curl: (35) ... wrong version number`
- **Node.js:** 오류 메시지 내 `EPROTO ... wrong version number`

## SSL: WRONG_VERSION_NUMBER의 원인은 무엇인가요?

가장 가능성 높은 첫 번째 원인:

- **프록시 주소 앞에 `https://`가 있는 경우**(평문 HTTP 포트). 가장 흔한 사례입니다.
- TLS를 요구하는 프록시 포트 제공자의 설정 복사 붙여넣기
- 포트 80에서 `https://` 사용하거나 TLS 요구하는 사이트 포트에 `http://` 사용, 프록시가 아닌 경우
- 코드가 상속받은 환경 변수 `HTTPS_PROXY=https://...`

## SSL: WRONG_VERSION_NUMBER를 단계별로 진단하는 방법은?

1. 코드가 사용하는 프록시 URL과 스킴 확인
2. 환경 변수 `HTTPS_PROXY`, `ALL_PROXY` 점검
3. 아래 curl 테스트에서 `-x http://`로 정상 동작 확인
4. curl은 작동하는데 코드가 안 된다면 코드나 환경에 `https://`가 남아 있음

*curl로 실패한 URL 테스트하기(HTTP 포트, 상세 모드)*

```bash
# Use the URL that fails; with https://api.ipify.org instead, you test the gateway alone.
# "HTTP/1.1 200 Connection established" first, then the site's own status: the site answered.
curl -v -x http://USERNAME:PASSWORD@gw.crawlrelay.com:7777 https://TARGET_URL

# Same test through the SOCKS5 port, with DNS resolved at the exit
curl -v --socks5-hostname gw.crawlrelay.com:7778 --proxy-user USERNAME:PASSWORD https://TARGET_URL
```

## SSL: WRONG_VERSION_NUMBER를 어떻게 고치나요?

- **프록시 URL에 `http://` 사용**: 모든 키에 `{"http": "http://...", "https": "http://..."}`
- **TLS 검증은 켠 상태 유지**: 문제는 스킴이며 `verify=False`가 아님
- **환경 변수 수정**: 스크립트 내에서 덮어쓰기보다 환경 변수 정리가 필요

## SSL: WRONG_VERSION_NUMBER 이후에 다시 시도해야 하나요?

이 오류는 재시도하지 마세요: 시도 때마다 동일한 실패입니다. 한 글자만 수정하면 해결되는 구성 오류입니다.

## SSL: WRONG_VERSION_NUMBER가 CrawlRelay에 어떻게 적용되나요?

CrawlRelay의 HTTP 포트는 HTTPS 사이트를 `CONNECT` 터널로 전달하는 평문 HTTP 프록시 포트입니다. TLS는 터널 내부에서 클라이언트와 사이트 간 종단 간 암호화로 이루어지므로 게이트웨이에는 `https://` 프록시 URL이 필요 없습니다.

게이트웨이: `gw.crawlrelay.com`, 포트 7777 (CONNECT를 통한 HTTP, HTTPS) 및 포트 7778 (SOCKS5). 사용자 이름 형식: `USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}`. 관련: [SSL 인증서 검증 실패](https://crawlrelay.com/ko/docs/errors/ssl-certificate-verify-failed/) · 프록시 연결 불가](https://crawlrelay.com/ko/docs/errors/cannot-connect-to-proxy/) · Python 가이드](https://crawlrelay.com/ko/docs/python/).

## SSL: WRONG_VERSION_NUMBER: 개발자들이 묻는 질문들

### http:// 프록시 URL을 사용하면 내 트래픽이 암호화되지 않나요?

HTTPS 사이트에는 아닙니다. `http://` 스킴은 프록시와의 짧은 CONNECT 교환에만 적용되며 여기에는 프록시 인증 정보가 포함됩니다. 이후 클라이언트는 터널 내부에서 사이트와 직접 TLS를 수행하고, 프록시는 암호화된 바이트만 전달합니다. 평문 `http://` 사이트는 프록시 유무와 관계없이 암호화되지 않습니다.

### urllib3 업그레이드 후 갑자기 이런 문제가 발생한 이유는?

urllib3 2.x는 HTTPS 프록시를 지원해, `https://` 프록시 URL을 문자 그대로 받아 프록시와 TLS 세션을 초기화합니다. 이전 버전에서는 잘못된 스킴에도 운 좋게 동작하는 경우가 있었습니다. 평문 HTTP 프록시 포트에는 `http://`을 쓰면 오류가 사라집니다.

### 오류를 없애기 위해 verify=False로 설정해도 되나요?

아니요. 인증서 검사를 끈다고 스킴 오류가 고쳐지지 않으며, 요청마다 중간자 공격에 노출됩니다. 프록시 URL 스킴을 수정하고, 운영 환경에서는 검증을 유지하세요.

## 이 참조에서 다른 프록시 오류들

- [401 Unauthorized vs 407](https://crawlrelay.com/ko/docs/errors/401-unauthorized/)
- [403 Forbidden](https://crawlrelay.com/ko/docs/errors/403-forbidden/)
- [407 Proxy Authentication Required](https://crawlrelay.com/ko/docs/errors/407-proxy-authentication-required/)
- [429 Too Many Requests](https://crawlrelay.com/ko/docs/errors/429-too-many-requests/)
- [502 Bad Gateway](https://crawlrelay.com/ko/docs/errors/502-bad-gateway/)
- [503 Service Unavailable](https://crawlrelay.com/ko/docs/errors/503-service-unavailable/)
- [504 Gateway Timeout](https://crawlrelay.com/ko/docs/errors/504-gateway-timeout/)
- [Cannot connect to proxy (ProxyError)](https://crawlrelay.com/ko/docs/errors/cannot-connect-to-proxy/)
- [Connection reset by peer (ECONNRESET)](https://crawlrelay.com/ko/docs/errors/connection-reset/)
- [ERR_PROXY_CONNECTION_FAILED](https://crawlrelay.com/ko/docs/errors/err-proxy-connection-failed/)
- [ERR_TUNNEL_CONNECTION_FAILED](https://crawlrelay.com/ko/docs/errors/err-tunnel-connection-failed/)
- [Read timed out (ReadTimeout)](https://crawlrelay.com/ko/docs/errors/read-timeout/)
- [SOCKS5 proxy errors](https://crawlrelay.com/ko/docs/errors/socks5-proxy-errors/)
- [SSL: CERTIFICATE_VERIFY_FAILED](https://crawlrelay.com/ko/docs/errors/ssl-certificate-verify-failed/)
- [SSL: WRONG_VERSION_NUMBER](https://crawlrelay.com/ko/docs/errors/ssl-wrong-version-number/)

**실패 사례를 다루는 문서가 있는 레지덴셜 프록시들** US$0.50/GB의 레지덴셜 프록시 CrawlRelay개, 트래픽이 절대 만료되지 않음. [가격 확인](https://crawlrelay.com/ko/pricing/) · [빠른 시작](https://crawlrelay.com/ko/docs/)

---

CrawlRelay: CrawlRelay는 개발자 중심의 회전형 레지덴셜 프록시 및 4G/5G 모바일 프록시 서비스로, 스크래퍼와 AI 데이터 파이프라인을 위한 비만료 선불 과금 트래픽을 US$0.50/GB부터 암호화폐로 결제하며 신분증 업로드가 없습니다. KYC 없이 — 신분증, 셀카, 문서 없이 이용 가능. 암호화폐로 결제하세요.
