일반 TLS를 사용하는 v2rayNG 노드에 해당하는 내용입니다. 먼저 로그에서 인증서 검증 실패와 연결 시간 초과를 구분한 뒤 Android 자동 시간 설정, 노드의 서버 이름, 인증서 신뢰 체인을 확인하세요. v2rayN에서 확인할 위치와 인증서 검증 건너뛰기를 장기적인 해결책으로 삼으면 안 되는 이유도 설명합니다. 노드에서 REALITY를 사용한다면 해당 인증 매개변수를 확인해야 하며, 일반 TLS 인증서 점검 절차를 그대로 적용할 수 없습니다.
1. 로그를 열어 실패 단계 확인하기
v2rayNG 메인 화면에서 사이드 메뉴를 열고 ‘로그’로 이동하세요. 현재 시간을 기록한 다음 메인 화면으로 돌아가 연결을 중지하고, 같은 노드를 다시 시작해 웹페이지 요청을 한 번 보내세요. 로그로 돌아와 해당 작업 이후 새로 추가된 오류만 확인합니다. 버전에 따라 메뉴 배치는 다를 수 있으니 ‘로그’ 항목을 찾으세요.
마지막 줄의 failed to process outbound traffic만 잘라서 보지 마세요. 대개 상위 단계의 요약 메시지이며, 실제 원인은 뒤따르는 x509, tls 또는 dial tcp에 나오는 경우가 많습니다. 연결 대상부터 가장 안쪽의 원인까지 오류 전체를 저장해야 시간을 고칠지, 항목을 수정할지, 서버 관리자에게 문의할지 판단할 수 있습니다.
이 흐름은 일반 TCP에 TLS를 사용하는 노드를 이해하기 위한 것입니다. connection refused 또는 i/o timeout이 표시되면 인증서를 받기 전 단계일 수 있습니다. x509 오류는 대개 인증서 검증 단계까지 진행됐다는 뜻입니다. 지연 시간 측정 결과에 숫자가 표시돼도 TLS 검증에 성공했다는 의미는 아닙니다. 특히 TCP 연결만 확인하는 방식이라면 더욱 그렇습니다.
2. 먼저 Android 날짜와 시간 동기화하기
Android ‘설정’ → ‘시스템’ → ‘날짜 및 시간’에서 ‘자동 시간 설정’과 ‘자동 시간대 설정’을 켜세요. 기기에 따라 ‘추가 설정’이나 ‘일반 관리’ 아래에 있을 수 있습니다. 시스템 설정에서 ‘날짜 및 시간’을 검색해도 됩니다. 설정을 마친 뒤 v2rayNG로 돌아가 연결을 중지했다가 다시 시작해 코어가 핸드셰이크를 새로 수행하도록 하세요.
- 날짜와 연도 확인: 기기를 오랫동안 꺼 두었거나 시간을 수동으로 바꾼 뒤에는 인증서 유효 기간을 벗어난 시간이 설정될 수 있습니다. 오차가 크지 않아도 문제가 됩니다. 갱신 직후의 인증서는 몇 분 차이만으로도 아직 유효하지 않은 것으로 판단될 수 있습니다.
- 시간이 실제로 동기화됐는지 확인: 설정을 켜기만 했다고 동기화가 완료된 것은 아닙니다. 먼저 기기가 인터넷에 정상적으로 연결됐는지 확인하고, 시스템에 표시된 날짜와 현재 시간을 대조하세요.
- 로그에 표시된 두 시간 확인: 유효 기간 오류에는 클라이언트의 현재 시간과 인증서의 시작·종료 시간이 함께 표시되는 경우가 많습니다. 현재 시간이 틀렸다면 기기 시간을 바로잡으세요. 현재 시간이 정확하지만 인증서가 만료됐다면 서버에서 갱신해야 합니다.
시간대는 화면에 시간을 표시하는 방식에 영향을 주지만, 인증서 검증은 실제 시각을 비교합니다. 시간대를 다른 지역으로 바꾸는 것만으로 시스템 시계 오류가 해결되는 경우는 드뭅니다. 만료된 인증서를 일시적으로 통과시키려고 날짜를 과거로 돌리지 마세요. 구독 요청과 다른 보안 연결에도 영향을 줄 수 있습니다.
3. 서버 주소, SNI, 전송 Host 대조하기
v2rayNG 노드 목록에서 해당 노드의 편집 아이콘을 눌러 ‘주소’, ‘포트’, ‘TLS’, ‘SNI’ 또는 ‘서버 이름’ 항목을 확인하세요. WebSocket을 사용한다면 ‘Host’와 ‘경로’도 확인해야 합니다. 저장하기 전에 원본 설정을 보관하세요. 구독 노드는 복사본을 만들어 비교할 수도 있습니다. 한 번의 시험 설정이 모든 노드에 적용되는 상황을 피할 수 있습니다.
| 항목 | 용도 | 확인 방법 |
|---|---|---|
| 주소 및 포트 | 연결할 서비스 진입점 지정 | 노드 제공자가 안내한 값으로 입력하세요. 인증서 오류가 난다고 포트를 임의로 바꾸지 마세요. |
| SNI / serverName | TLS 서버 이름을 지정하며, 일반적으로 인증서 이름 검증에도 사용 | 제공자가 지정한 이름을 입력하세요. 인증서에 해당 이름이 포함되어 있어야 합니다. |
| WebSocket Host | HTTP 요청 및 리버스 프록시의 사이트 라우팅에 사용 | 전송 설정과 대조하세요. 인증서 검증을 켜고 끄는 항목으로 취급하지 마세요. |
| WebSocket 경로 | 리버스 프록시가 요청을 전달할 서비스 지정 | 앞부분의 슬래시, 대소문자, 전체 경로를 확인하세요. |
‘위장 도메인’은 정확한 항목 이름이 아닙니다. 안내에 따라 SNI와 HTTP Host를 모두 이렇게 부르기도 하지만 두 값은 서로 다른 계층에서 사용됩니다. 두 값이 같을 수도 있고 서버 구성에 따라 다를 수도 있습니다. 항목별로 확인하고 도메인이 두 개 보인다고 무조건 같게 바꾸지 마세요.
노드 주소에 IP를 입력했지만 인증서에는 도메인만 포함되어 있다면, 검증에 올바른 서버 이름을 사용해야 합니다. 인증서에 해당 IP가 포함된 경우에만 IP 주소로 검증할 수 있습니다. SNI에는 일반적으로 호스트 이름만 입력하며 https://, 포트, 경로는 넣지 않습니다. 비워 두었을 때의 기본 동작은 코어와 노드 유형에 따라 달라질 수 있으므로 임의로 추측하지 마세요.
포트가 443이라고 해서 올바른 TLS 서비스가 반드시 활성화된 것은 아닙니다. 잘못된 리버스 프록시 진입점에 연결하면 다른 사이트의 인증서가 반환될 수도 있습니다. VMess와 VLESS는 프록시 프로토콜이고 TLS는 전송 보안 계층입니다. VMess를 VLESS로 바꾸는 것만으로는 잘못된 인증서 이름을 고칠 수 없습니다.
4. 오류 원문으로 인증서 문제와 서버 문제 구분하기
아래 메시지는 더 긴 오류 체인 안에 나타날 수 있으며, 앞뒤의 메시지는 코어 버전에 따라 달라집니다. 가장 구체적인 오류를 기준으로 조치하세요. ‘핸드셰이크 실패’라는 말만 보고 수정 방향을 정하지 마세요.
오류: x509: certificate has expired or is not yet valid
원인: 현재 시간이 인증서 유효 기간에 포함되지 않습니다. 해결: 먼저 기기 시간을 동기화하세요. 시간이 정확하다면 관리자에게 서버가 실제로 제공하는 인증서가 만료됐는지, 갱신 후 새 인증서를 다시 불러왔는지 확인해 달라고 요청하세요.
오류: x509: certificate signed by unknown authority
원인: 현재 검증기가 신뢰할 수 있는 인증서 체인을 구성하지 못했습니다. 중간 인증서가 빠졌거나 신뢰되지 않는 인증 기관이 사용됐을 수 있습니다. 해결: 관리자에게 전체 인증서 체인을 확인해 달라고 요청하세요. 직접 구축한 환경이 확실한 경우에만 코어가 지원하는 방식으로 검증된 신뢰 인증서를 설정하세요.
오류: x509: cannot validate certificate for
원인: 뒤에 because it doesn't contain any IP SANs가 이어진다면 IP 주소로 검증 중이지만 인증서에 해당 IP 항목이 없다는 뜻입니다. 해결: 제공자가 지정한 서버 이름을 확인하세요. 연결에 사용하는 IP를 SNI에 직접 입력하지 마세요.
오류: remote error: tls: handshake failure
원인: 상대 서버가 핸드셰이크를 거부했습니다. SNI, TLS 매개변수, 서버 정책과 관련된 문제일 수 있으며, 이 한 줄만으로 인증서 만료라고 단정할 수 없습니다. 해결: 먼저 구독 원본 설정으로 되돌린 뒤 관리자에게 같은 시간대의 서버 로그를 확인해 거부 원인을 찾아 달라고 요청하세요.
오류: tls: first record does not look like a TLS handshake
원인: 대상 서버가 TLS 레코드로 보이지 않는 데이터를 반환했습니다. 일반 텍스트 서비스나 잘못된 포트에 연결했을 때 자주 발생합니다. 해결: 포트와 전송 보안 유형을 확인하고 해당 진입점이 실제로 TLS를 제공하는지 확인하세요. TLS를 끄고 운에 맡기지 마세요.
시간과 이름이 모두 정확한데도 같은 노드에서 네트워크를 바꿔 가며 동일한 인증서 오류가 발생한다면 서버 인증서 설정을 우선 확인해야 합니다. 반대로 특정 Wi-Fi에서만 실패한다면 먼저 해당 네트워크의 인터넷 접속 인증을 완료한 다음 네트워크 차단 여부를 확인하세요. 브라우저에서 HTTPS 페이지가 열린다고 해서 노드 코어가 받는 인증서 체인까지 완전히 동일하다는 뜻은 아닙니다.
5. allowInsecure는 끈 상태로 유지하고 TLS와 REALITY를 따로 점검하기
노드 편집 화면으로 돌아가 ‘인증서 검증 건너뛰기’, ‘안전하지 않은 연결 허용’ 또는 이에 해당하는 allowInsecure 옵션을 찾으세요. 일반적으로 사용할 때는 끈 상태로 유지해야 합니다. 이 옵션은 서버 신원 검증을 완화할 뿐, 인증서 체인을 보완하거나 인증서를 갱신하지 않으며 잘못된 전송 진입점을 바로잡지도 않습니다.
{
"tlsSettings": {
"allowInsecure": false
}
}
이는 일반 TLS 설정의 일부 항목을 보여 주는 예시일 뿐, 그대로 가져올 수 있는 완전한 노드 설정이 아닙니다. 그래픽 인터페이스를 사용한다면 해당 옵션만 수정하세요. 이 내용을 전체 설정 파일에 붙여넣어 덮어쓰지 마세요. 검증을 건너뛴 뒤 일시적으로 연결되더라도 문제가 검증 단계에 있을 가능성만 보여 줄 뿐, 의도한 서버에 연결됐다는 뜻은 아닙니다.
- 일반 TLS: 유효 기간, 서버 이름, 인증서 체인, 신뢰 출처를 중점적으로 확인하세요. 수정한 뒤에는 검증을 켠 상태로 사용해야 합니다.
- REALITY: 노드 제공자가 요구한 서버 이름, 인증 공개 키 또는 관련 자격 증명, shortId 등의 매개변수를 확인하세요. 버전에 따라 화면의 항목 이름이 다를 수 있으므로 구독 원본과 현재 클라이언트를 기준으로 확인해야 합니다.
- 프로토콜 지원: v2rayNG는 Xray 코어를 사용하고 v2flyNG는 v2fly 코어를 사용합니다. 후자가 전자의 REALITY 설정을 그대로 지원한다고 가정하지 마세요.
6. 저장 후 변수 하나씩 바꾸고 전체 검증하기
한 번에 한 항목만 바꾸세요. 먼저 시간, 다음으로 서버 이름, 마지막으로 인증서 체인을 확인합니다. 노드를 저장한 뒤 연결을 중지했다가 다시 시작하고 요청을 새로 보낸 다음 새 로그를 확인하세요. DNS, 라우팅 분기, 포트, TLS 옵션을 한꺼번에 바꾸면 연결이 복구돼도 어떤 변경이 효과가 있었는지 알 수 없습니다.
- 원본 노드를 하나 보관하고 클라이언트 버전, 코어 버전, 오류 발생 시간을 기록해 두세요. 문제를 재현하는 데 도움이 됩니다.
- 인증서 검증을 켠 상태에서 이전에 실패했던 대상에 접속해 캐시된 페이지가 아닌지 확인하세요.
- 새 로그에 같은 종류의
x509또는tls오류가 계속 나타나는지 확인하세요. 지연 시간 측정 결과 하나만으로 판단하지 마세요. - 구독을 업데이트한 뒤 항목을 다시 확인하세요. 수동 수정 내용이 덮어써진다면 구독 관리자에게 원본 설정을 수정해 달라고 요청하세요.
데스크톱에서 v2rayN을 사용한다면 노드를 두 번 클릭해 편집 창을 열고 TLS 서버 이름과 안전하지 않은 연결 허용 옵션을 대조하세요. 코어 출력은 로그 영역이나 로그 창에서 확인할 수 있습니다. Windows에서는 ‘설정’ → ‘시간 및 언어’ → ‘날짜 및 시간’에서 시간을 동기화할 수 있습니다. 버전에 따라 메뉴 이름은 달라져도 시간, 인증서 이름, 신뢰 체인을 확인하는 원칙은 같습니다.
7. TLS 인증서 문제 해결 FAQ
시간이 자동으로 동기화됐는데도 인증서가 만료됐다고 나오는 이유는 무엇인가요?
먼저 오류에 기록된 현재 시간이 정확한지 확인하세요. 정확하다면 인증서 만료 시각을 확인합니다. 서버에서 인증서 파일을 갱신했더라도 리버스 프록시가 이전 인증서를 계속 불러오고 있을 수 있습니다. 오류가 발생한 시간을 관리자에게 전달하고 실제 연결을 수신하는 진입점을 확인해 달라고 요청하세요. 휴대전화 날짜를 계속 바꾸지는 마세요.
SNI와 WebSocket Host에 같은 도메인을 입력해야 하나요?
반드시 그런 것은 아닙니다. SNI는 TLS 계층에서, Host는 HTTP 라우팅에서 사용됩니다. 노드 편집 화면을 열어 각각 제공자가 안내한 원본 매개변수와 대조하세요. 설정 근거가 명확하지 않다면 한 항목의 값으로 다른 항목을 덮어쓰지 마세요.
인증서 검증을 건너뛰면 연결되는데 계속 켜 둬도 되나요?
권장하지 않습니다. 먼저 해당 옵션을 끄고 오류에 따라 기기 시간, 서버 이름, 인증서 체인을 확인하세요. 검증을 꺼야만 연결된다면 인증서를 수정하거나 신뢰할 수 있는 설정을 명확히 제공하도록 관리자에게 요청하세요. 장기간 서버 신원 확인을 우회해서는 안 됩니다.
노드는 연결되는데 구독 업데이트에서만 인증서 오류가 발생하면 어떻게 하나요?
구독 HTTPS 요청과 노드 TLS 핸드셰이크를 구분하세요. 두 연결은 서로 다르며 네트워크 경로와 신뢰 방식도 다를 수 있습니다. 구독 주소가 유효한지, 기기 시간이 정확한지 확인하고 업데이트 중 발생한 오류를 살펴보세요. 노드 SNI를 수정해도 구독 서버의 인증서 문제는 보통 해결되지 않습니다.
DNS를 바꾸면 모든 TLS 핸드셰이크 실패가 해결되나요?
아닙니다. DNS는 이름이 잘못 해석되거나 잘못된 진입점으로 연결됐을 때 중요한 단서가 됩니다. 인증서 만료나 이름 불일치가 명확하다면 해당 설정부터 바로잡으세요. 사용자 지정 라우팅 분기를 사용한다면 테스트 요청이 문제를 확인 중인 노드를 실제로 통과하는지도 확인해야 합니다.