HTTP로 스크립트를 불러오는 HTTPS 페이지는 서로 다른 두 수준의 보호로 두 개의 요청을 보내며, 자물쇠는 첫 번째만 설명합니다. 터널은 이를 바꾸지 않습니다. 터널이 보호하는 것은 운반 경로이지 리소스 자체의 스킴이 아니기 때문입니다. 주소 표시줄 대신 콘솔을 읽으면 브라우저는 이미 어떤 요청이 실패했는지 알려 주고 있습니다. 세 가지 확인으로 반쯤 동작하는 페이지에서 실제 수리로 넘어갈 수 있습니다.

주소 표시줄이 아니라 요청을 읽으세요

HTTPS로 가져온 문서는 평문 HTTP를 통해 스크립트, 스타일시트, 글꼴 또는 프레임을 참조할 수 있습니다. 그 참조는 별개의 요청이며, 브라우저가 불평하는 대상이 바로 그것입니다. 본문서의 보호는 그쪽으로 거슬러 적용되지 않고, 두 흐름을 모두 나르는 터널도 어느 스킴도 바꾸지 않습니다. 따라서 페이지는 진짜로 안전하면서 동시에 진짜로 망가져 있을 수 있습니다.

리소스를 단지 포함된 파일이라고 부르는 것만으로 그 대체가 무해해지지는 않습니다.

안전하지 않은 스크립트 내용이 전송 중에 변경된 뒤 실행될 수 있다면 페이지의 동작을 바꿀 수 있으며, 이는 겉모습의 고장보다 큰 문제입니다. 이미지는 전송 중에 수정되면 더 작지만 실제 위험을 안습니다. 자물쇠는 무엇에 대해서도 거짓말하지 않습니다. 자물쇠는 당신이 던진 질문보다 좁은 질문에 답하고 있을 뿐입니다.

어떤 리소스가 차단되고 어떤 것이 승격되는지 알아 두세요

브라우저는 모든 리소스 유형을 똑같이 다루지 않습니다. 혼합 콘텐츠 지침 HTTPS로 승격되는 요청과 완전히 차단되는 요청을 구분하며, 스크립트, 스타일시트, 프로그래밍 방식 요청은 차단되는 쪽에 있고 이미지와 미디어는 대신 승격되거나 표시될 수 있습니다.

이 차이가 혼란스러운 보고를 설명합니다. 스크립트가 차단된 페이지는 기능을 완전히 잃지만, 이미지가 승격된 페이지는 멀쩡해 보이면서 조용히 요청을 바꾼 것입니다. 문서화된 범주에도 예외가 있으므로 특정 유형의 모든 URL이 성공적으로 승격된다고 가정하지 마세요. 파일 확장자로 추론하는 대신 콘솔이 특정 요청에 대해 하는 말을 읽으세요.

차단된 위젯은 터널이 실패했다는 증거가 아닙니다. 브라우저가 제 일을 했다는 증거입니다.

참조를 원천에서 고치세요

사이트 소유자에게 수리는 안전하지 않은 URL이 기록된 곳에 속합니다. 템플릿, 스타일시트, URL을 조립하는 스크립트, 또는 외부 구성 요소입니다. 보이는 페이지 주소를 바꾸는 것은 그 모두를 건드리지 않습니다. 원본에서 호스트를 찾아 콘솔이 우연히 지목한 하나만이 아니라 모든 참조를 고치세요.

그다음 리소스가 정말로 유효한 신원으로 HTTPS를 통해 제공되는지 확인하세요. 스킴을 바꾼다고 해서 그곳에 한 번도 게시된 적 없는 서비스가 생겨나지는 않습니다.

grep -rn "http://assets.example" ./templates
curl -sSI https://assets.example/widget.js | head -n 1

리디렉션도 따라가세요. HTTPS로 시작하는 참조도 평문 전달 경로에 도착할 수 있습니다. 의존성에 안전한 전달 수단이 아예 없다면 우회책을 내보내는 대신 일반 변경 절차로 제거하거나 교체하세요. 사용자에게는 브라우저 보호를 켜 둔 채로 두고 리소스의 URL, 유형, 콘솔 메시지를 사이트 소유자에게 알리세요. 한 페이지를 위해 직원에게 안전하지 않은 콘텐츠를 허용하라고 지시하는 안내를 절대 유포하지 마세요. 그 예외는 그것을 촉발한 사건보다 오래 살아남습니다.

사용자가 페이지를 만지는 방식 그대로 다시 테스트하세요

첫 문서만이 아니라 요청 시 리소스를 불러오는 동작도 연습하세요. 페이지는 버튼을 누른 뒤 추가 코드, 데이터, 다운로드를 가져오며, 그 요청이 흔히 안전하지 않은 것들입니다. 보호를 켜 둔 상태로 구체적인 요청과 눈에 보이는 동작을 확인하세요. 느슨하게 한 브라우저 프로필로 시작하는 테스트로는 일반 사용자가 보는 것을 보여 줄 수 없습니다.

터널에는 여전히 제 일이 있고, 그 일은 페이지 무결성이 아니라 네트워크 접근입니다.

트래픽이 터널의 종단을 떠난 뒤에는 남은 어떤 HTTP 가져오기도 운반 경로에서 얻은 것이 없습니다. 리소스 경로를 고치고 브라우저의 강제는 그대로 두세요. 안전하지 않은 의존성의 수리로서 전송 계층을 하나 더 다루는 것이야말로, 제대로 작동하던 통제를 꺼 버리는 헬프데스크 스크립트에 팀이 도달하는 길입니다.

관련 글