주체 대체 이름: VPN 서버는 어떻게 식별되는가
신뢰할 수 있는 인증서라도 VPN 호스트 이름에는 맞지 않을 수 있습니다. SAN에는 클라이언트가 확인하는 식별 형식, 즉 DNS 이름이나 IP 주소가 들어 있어야 합니다.
인증서 체인이 깨끗하게 검증되는데도 클라이언트가 그 인증서를 거부하고, 오류는 이름이 일치하지 않는다고 말합니다. 그 메시지는 누가 인증서에 서명했는지에 관한 것이 아닙니다. 인증서가 표현할 수 있는 식별자를 담는 주체 대체 이름 확장과, 설정한 식별자가 그곳에 올바른 형식으로 있는지에 관한 것입니다. 신뢰는 누가 서명했는지에 답하고, 이름 검사는 어느 호스트에 속하는지에 답합니다.
클라이언트가 실제로 비교하는 것
클라이언트는 설정을 참조 식별자로 바꿉니다: 호스트 이름, 주소 또는 프로토콜별 식별자입니다. 그다음 사용 중인 프로토콜의 일치 규칙을 적용해 인증서에서 그 식별자를 찾습니다. 같은 유형의 항목만 계산되므로 DNS 항목이 주소를 만족할 수 없고, 사람이 인증서를 보든 보지 않든 비교는 수행됩니다.
그 확장에 참조 식별자가 없으면 기존 공통 이름이 일치하더라도 검사는 실패합니다. 인증서가 회사에 합법적으로 발급되었더라도 이름이 포함되지 않았다면 vpn.example.com에는 틀린 인증서입니다. 인증서가 진짜여도 실패는 이름 불일치입니다.
DNS 이름과 IP 주소는 별개의 항목
203.0.113.10을 가리키는 프로필인데 인증서가 vpn.example.com만 나열하면, 패킷은 도착하지만 식별자가 일치하지 않기 때문에 거부됩니다. DNS 이름과 주소 리터럴은 서로 다른 항목 유형으로 저장되며, 하나가 다른 하나를 대신하지 않습니다. 그래서 주소로는 접근할 수 있는 서비스가 그 주소를 쓰는 프로필로는 쓸 수 없을 수 있습니다.
와일드카드도 자체 규칙을 따릅니다: 와일드카드는 하나의 레이블을 덮고, 도메인 아래의 모든 이름을 덮지는 않습니다. DNS 비교는 대소문자를 구분하지 않지만 다른 식별자 유형은 구분하므로, 화면에서 같아 보이는 값이 엄격한 비교에서 실패할 수 있습니다. 문자열을 눈으로 비교하지 말고 사용 중인 식별자 유형의 일치 규칙을 확인하십시오. 확장에 이름을 추가하는 것은 발급 결정이며, 클라이언트 설정이 제공할 수 있는 것이 아닙니다.
연결이 실제로 사용한 인증서를 점검하십시오
관리 페이지에서 복사한 파일이 아니라 실제 엔드포인트가 제시하는 자료를 읽으십시오. 부하 분산기나 교체된 인스턴스는 몇 달 전에 업로드한 인증서와 다른 것을 제시할 수 있고, 그 차이는 콘솔에서 보이지 않습니다.
openssl s_client -connect vpn.example.com:443 -showcerts </dev/null | openssl x509 -noout -text
주체 대체 이름 블록, 발급자 체인, 유효 기간은 이름 불일치와 만료가 서로 다른 오류를 내기 때문에 같은 읽기에 속합니다. 그 블록의 각 이름을 프로필에 설정된 식별자와 한 글자씩 비교하고 어떤 유형인지 기록하십시오. 엔드포인트의 주소 형식에 대해 명령을 다시 실행하면 인증서가 두 식별자를 모두 덮는지 하나만 덮는지 드러납니다. 관리 콘솔의 친절한 주체 표시는 검증 결과가 아니며 확장에 어떤 이름이 있는지 말해 주지 않습니다.
공통 이름은 현대의 진실 출처가 아닙니다
브라우저와 대부분의 TLS 라이브러리는 이제 호스트 이름 일치에 공통 이름을 무시하고 확장을 참조합니다. 일부 VPN 클라이언트는 여전히 공통 이름을 먼저 비교하거나 확장이 없을 때 그것으로 돌아가며, 그래서 한 인증서가 브라우저에서는 통과하고 클라이언트에서는 실패할 수 있습니다. 같은 이름 검사가 인증서가 전혀 바뀌지 않아도 한 플랫폼에서는 통과하고 다른 플랫폼에서는 실패할 수 있습니다.
인증서가 틀렸다고 판단하기 전에 클라이언트가 어느 필드를 읽는지 알아내십시오. 같은 엔드포인트의 두 클라이언트가 서로 다를 수 있고, 그 차이는 인증서가 아니라 클라이언트에 대한 정보입니다.
검사가 아니라 발급이나 프로필을 고치십시오
프로필이 별칭을 중심으로 만들어졌다면 문서화된 호스트 이름으로 다시 지정하거나 별칭용 인증서를 다시 발급해 계획된 시간에 배포하십시오. 경고를 침묵시키는 것은, 검사가 서명된 인증서를 이 특정 호스트에 묶는 유일한 단계이기 때문에 세 번째 선택지가 아닙니다. 그것을 없애면 같은 기관의 어떤 인증서든 도달하려던 서버를 대신할 수 있습니다.
갱신은 만료 날짜만 앞으로 미루지 말고 의도한 이름과 목적을 보존해야 합니다. 이름을 빠뜨리는 갱신은 다음 재시작에 예정된 새로운 장애이며, 변경 당시 옛 인증서가 아직 유효했기 때문에 대개 경고 없이 찾아옵니다.
기대하는 식별자, 제시된 이름, 그리고 그것에 서명한 체인을 기록하십시오. 그 기록은 다음 갱신을 조사가 아니라 비교로 바꿉니다. 확장의 정의는 RFC 5280에 있으니 특정 발급을 확인해야 할 때 참조하십시오.