
얼마 전 인증서 만료로 접속이 막힌 사이트를 봤다. 서버 자원은 넉넉했고 트래픽도 평소와 같았다. 갱신 작업은 예약돼 있었지만, 새 인증서를 웹서버에 반영하는 단계가 빠져 있었다. 보안서버구축에서 돈을 쓰기 전에 확인할 것은 서버 사양보다 인증서가 발급되고 갱신되는 경로다.
먼저 암호화가 끝나는 위치를 확인한다
방문자의 연결을 웹서버가 직접 받는지, 호스팅 업체의 장비나 CDN이 먼저 받는지부터 그려보면 설정할 곳이 보인다. 앞단에서 TLS 연결을 끝내는 구조라면 방문자에게 보이는 인증서와 앞단 장비가 원본 서버에 접속할 때 쓰는 인증서는 별개다. 화면에 자물쇠가 표시돼도 원본 서버까지의 연결 설정이 잘못됐을 수 있다. 프록시를 쓴다면 원본 인증서의 이름과 유효기간을 검증하는 설정까지 확인한다.
작은 블로그라면 인증서 때문에 VPS를 새로 살 필요는 거의 없다. 기존 웹호스팅이 무료 인증서와 자동 갱신을 지원한다면 그 기능을 쓰는 편이 운영 지점이 적다. 하루 1만 페이지 조회수 중 10%가 가장 바쁜 한 시간에 몰려도 페이지 요청은 평균 초당 약 0.28건이다. 이미지와 스크립트 요청, 봇 유입은 별도로 봐야 하지만, 이 수치만으로 고사양 서버를 계약할 근거는 약하다. 현재 요금제에서 실제 CPU 사용률, 메모리 여유, 응답 시간부터 확인하는 게 맞다.
인증서 발급 전에 이름과 검증 경로를 맞춘다
인증서에는 방문자가 접속하는 모든 호스트 이름이 들어가야 한다. 대표 주소만 넣고 별칭을 빠뜨리면 별칭으로 접속한 사람에게 경고가 뜬다. DNS가 어느 장비를 가리키는지, 80번과 443번 포트가 어디로 들어오는지, 방화벽과 CDN 설정이 요청을 가로채는지도 함께 확인한다. 특히 서버를 이전하는 중에는 예전 서버와 새 서버가 서로 다른 인증서를 내보내는 일이 있다.
렛츠인크립트의 웹 경로 검증은 80번 포트로 들어온 요청에 정해진 파일을 보여줘야 한다. 이 경로가 차단되거나 다른 서버로 향하면 발급과 갱신이 실패한다. 와일드카드 인증서가 필요하면 DNS의 TXT 레코드로 소유권을 검증하는 방식을 쓴다. 이름이 몇 개 안 되는 사이트라면 와일드카드보다 각 이름을 명시한 인증서가 관리하기 쉬운 경우가 많다. DNS 자동화에 쓰는 계정에는 필요한 권한만 주고, 자격 증명은 웹 공개 디렉터리 밖에 둔다.
유료 인증서가 필요한 별도 계약 요건이 없다면 무료 인증서로 충분한 사이트가 많다. 가격보다 자동 갱신 가능 여부와 실패 알림이 중요하다. 발급에 성공한 뒤에도 실제 서비스에 새 인증서가 적용되는지 확인해야 한다.
전환은 작은 범위에서 검증한 뒤 넓힌다
적용 전에는 웹서버 설정과 인증서 관련 파일을 백업하고, 되돌릴 설정을 준비한다. 개인키는 백업하더라도 접근 권한을 제한한다. 설정 검사를 통과한 다음 서비스를 재적용하고, 외부에서 443번 포트로 접속해 인증서 이름, 체인, 만료일을 확인한다. 서버 안에서 파일만 확인하면 앞단 장비가 예전 인증서를 내보내는 문제를 놓칠 수 있다.
그다음 평문 요청을 암호화 연결로 돌린다. 첫 화면뿐 아니라 로그인, 결제, 관리자 화면과 이미지·글꼴·스크립트까지 확인한다. 브라우저 개발자 도구에 혼합 콘텐츠 경고가 보이면 해당 자원의 호출 경로를 고친다. 이전 뒤 로그인 상태가 풀리거나 무한 이동이 생기면 프록시가 전달한 연결 정보, 애플리케이션의 기본 주소, 쿠키 보안 설정을 순서대로 본다.
TLS는 가능한 환경에서 1.3과 1.2를 사용하고 오래된 버전은 끈다. HSTS는 모든 화면과 하위 호스트의 암호화 연결이 확인된 뒤 적용한다. 하위 호스트까지 한꺼번에 강제하면 아직 전환하지 않은 관리 도구가 막힐 수 있다. 처음부터 긴 유지 기간을 넣기보다 짧게 시험하고 범위를 넓히는 편이 안전하다.
갱신 실패를 장애로 만들지 않는 운영 절차
자동 갱신 작업이 등록됐다는 사실만으로 끝나지 않는다. 시험 갱신을 한 번 실행하고, 발급된 파일이 올바른 위치에 놓이는지, 웹서버가 새 파일을 읽도록 재적용되는지 확인한다. 인증서 만료일은 외부에서 감시하고, 갱신 실패와 남은 유효기간에 각각 알림을 건다. 인증서 유효기간은 발급 방식에 따라 달라질 수 있으므로 고정된 날짜를 외우는 것보다 실제 만료일을 감시하는 편이 낫다.
장애가 나면 먼저 DNS가 현재 장비를 가리키는지, 443번 포트가 열려 있는지, 외부에 보이는 인증서가 어느 장비에서 나오는지 확인한다. 그다음 이름 불일치, 만료, 중간 인증서 누락, 갱신 작업 기록을 본다. 서버 이전 때는 기존 설정을 바로 지우지 말고 새 경로에서 발급과 갱신을 시험한 뒤 전환한다. 백업도 파일 보관으로 끝내지 말고 별도 환경에서 복원해 봐야 한다. 보안서버구축에 들어가는 비용은 대개 인증서 가격보다 이런 확인 절차를 얼마나 안정적으로 운영하느냐에서 갈린다.
