요즘 SSL 인증서를 보면 Common Name에 Wildcard를 사용하는 경우가 있습니다.
대표적인 예로 https://forums.codegear.com 에 가 보면 알 수가 있습니다.
허걱!
만약 그러면 Root CA에서 일반 기업에게
Common Name을 "*.com" 이나 "*"로 발행을 해 주면
어떻게 될까 하는 쓸데(?) 없는 생각이 갑자기 들었습니다.
그래서 삽질 한번 해 봤습니다.
[테스트 절차]
1. hosts 파일에 다음과 같은 DNS 정보를 입력 시켜 놓는다.
127.0.0.1 us.www.mysite.com
127.0.0.1 kr.www.mysite.com
127.0.0.1 www.mysite.com
127.0.0.1 www2.mysite.com
127.0.0.1 mysite.com
127.0.0.1 com
2. Root CA 인증서를 만들어 신뢰할 수 있는 인증기관에 추가시켜 놓는다.
3. 각각의 domain name을 위한 인증서를 만든다.
4. 각각의 domain name용 인증서를 이용해서 웹서버(SSLServer.exe)를 구동해 놓고 웹브라우저(Google Chrome)으로 들어가 본다.
5. 경고창이 뜨는지 일일이 확인해 본다.
[시연 데모]
[테스트 결과]
Common Name | Site URL | Warning Message |
*.www.mysite.com | https://us.www.mysite.com | bypass |
https://kr.www.mysite.com | bypass | |
*.mysite.com | https://www.mysite.com | bypass |
https://www2.mysite.com | bypass | |
*.com | https://mysite.com | Warning Message |
* | https://com | Warning Message |
[결론]
1. Wildcard(*)는 하나의 domain label만을 뜻하지, 점(.)을 포함하는 모든 domain name 을 뜻하는 것은 아니다.
2. 웹브라우저는 Common Name의 domain label의 갯수가 2개 이상일 경우에만 제대로 된 인증서로 간주한다.
(*.com 이나 * 과 같이 domain label이 하나 이하인 경우에는 올바른 인증서가 아닌 것으로 인식한다)
3. 그리 걱정하지 않아도 된다. Root CA가 국가 정보 기관에 CA Key file을 넘긴다면 모를까... ^^
[테스트 파일 다운로드]
ssl_certificate_warning_test.zip
*.co.kr 도 인증서로 간주하고 Warning을 띄우지 않는다는군요.
그렇다면
만약 어떤 Root CA가 자국의 정보기관에
*.co.jp *.co.uk 등을 Common Name으로 가지은 인증서를 발급(issue)해 주는 경우
해당 사이트는 SSL sniffing의 위험성이 높아 진다는 것인데...
에고, 얘기 그만 해야지.
SSL 위험성을 운운한다고
오픈웹 추종자들 또 찌질댈라...
참고로 예전 DNS tunneling 프로그램 삽질할 때 그려 놓았던 Domain Name BNF 간략 버전.
DOT := '.'
ALPHA := 'A'~'Z' or 'a'~'z'
DIGIT := '0'~'9'
ALPHA_DIGIT := ALPHA or DIGIT
DOMAIN_LABEL := (ALPHA_DIGIT) +
DOMAIN_NAME := DOMAIN_LABEL ( DOT and DOMAIN_LABEL ) *
본 테스트는 Google Chrome 웹브라우저만을 가지고 테스트를 했기 때문에 다른 웹브라우저에서는 어떻게 작동할 것(Warning을 띄울지 안띄울지)인지는 모르겠지만, 아마도 비슷한 결과를 내지 않을까 생각이 듭니다. 웹브라우저 제작자들이 바보가 아닌 이상. ^^
아마 이를 위해 Wildcard Common Name에 관한 Draft 정도는 인터넷상에 있을 법 한데, 찾아 봐도 못 찾겠네요.
이놈의 저질스러운 검색의 능력... ㅠㅠ