Technote

보안 실무

연재 첫 보안 사고를 겪기 전에 8부 중 6부

SSL 을 켰는데 자물쇠가 안 뜨는 이유

인증서는 정상인데 주소창에 경고가 뜹니다. 원인은 대개 페이지 안에 남아 있는 http:// 한 줄이고, 찾는 순서가 정해져 있습니다.

인증서를 발급받고 사이트가 https:// 로 열리는 것까지 확인했는데, 주소창의 자물쇠가 뜨지 않거나 “안전하지 않음” 경고가 붙습니다. 인증서에는 문제가 없습니다. 이것은 혼합 콘텐츠라고 부르는 상태이고, 원인과 해결이 분명한 문제입니다.

자물쇠가 말하는 것

자물쇠는 “이 페이지가 안전하다” 가 아니라 “이 페이지를 만드는 데 쓰인 모든 것이 암호화된 경로로 왔다” 는 뜻입니다. 그래서 페이지 안에 http:// 로 불러오는 이미지 한 장, 스크립트 한 줄만 남아 있어도 브라우저는 그 약속이 깨졌다고 판단합니다.

인증서가 아니라 페이지 안의 한 줄이 자물쇠를 결정한다

단순히 보기 나쁜 문제가 아닙니다. 브라우저는 스크립트나 스타일처럼 위험도가 높은 자원이 http:// 로 오면 아예 차단합니다. “왜 이 페이지만 레이아웃이 깨지지” 의 원인이 여기인 경우가 많습니다.

어디에 숨어 있나

찾는 순서가 있습니다. 브라우저 개발자 도구를 열고 콘솔 탭을 보면 어떤 주소가 문제인지 그대로 나옵니다. 그 주소를 보고 아래 네 곳 중 어디인지 판단합니다.

혼합 콘텐츠의 출처 — 마지막 하나만 우리 쪽에서 해결할 수 없다

가장 흔한 것은 데이터베이스에 남은 옛 주소입니다. SSL 을 켜기 전에 쓴 글에는 이미지 주소가 http:// 로 저장되어 있고, 이것은 화면 설정을 바꿔도 그대로 남습니다.

네 번째 항목만 성격이 다릅니다. 외부 서비스가 암호화 연결을 제공하지 않는다면 우리 쪽에서 고칠 수 없으므로 다른 서비스로 대체해야 합니다. 요즘은 드물지만, 오래된 통계 스크립트나 배너에서 종종 발견됩니다.

고치는 순서

먼저 설정 › 일반에서 워드프레스 주소와 사이트 주소가 둘 다 https:// 로 되어 있는지 확인합니다. 여기가 http:// 이면 아래 작업이 다 무의미해집니다.

다음으로 데이터베이스의 옛 주소를 일괄 치환합니다. 이 작업은 반드시 백업 후에 합니다 — 치환 범위를 잘못 잡으면 되돌리기 어렵고, 앞 회차의 복구 연습이 여기서 값을 합니다. 직접 하기 부담스럽다면 데이터를 건드리지 않고 출력 단계에서 바꿔 주는 플러그인을 쓰는 방법도 있습니다.

마지막으로 http:// 로 들어온 방문자를 https:// 로 보내는 리다이렉트가 걸려 있는지 확인합니다. 이것이 없으면 검색 결과나 오래된 링크로 들어온 사람은 계속 암호화되지 않은 화면을 봅니다.

고친 뒤 확인

수정 후에는 홈만 보지 말고 글 · 문의 페이지 · 결제 화면을 각각 열어 자물쇠를 확인합니다. 혼합 콘텐츠는 페이지마다 다르게 나타나기 때문에, 홈이 깨끗해도 특정 글에서만 경고가 뜨는 일이 흔합니다.

인증서와 서버 설정에 관한 글은 서버 · 인프라 아카이브에 있고, 전체 페이지의 자물쇠 상태를 주기적으로 확인받고 싶다면 InfraGuard 지속 관제가 이 항목을 포함합니다.

다음 회차

다음 회차는 다시 로그인으로 돌아갑니다 — 이번에는 계정이 아니라 로그인 화면 자체를 다룹니다. 시도 제한과 주소 변경이 각각 실제로 무엇을 해 주는지 솔직하게 정리합니다.

이 주제의 다른 글

노하우 목록으로

보안 실무

업로드 디렉터리의 PHP 실행 차단 — 마지막 관문

업로드 취약점은 파일을 올리는 데서 끝나지 않습니다. 올라간 파일이 실행될 때 원격 코드 실행이 됩니다. uploads 에서 PHP 를 못 돌게 하면 그 승격이 끊깁니다.

운영 · 관리자 2분 읽기

₩270,000 · 신청하기