HTTPS가 HTTP보다 안전하다면, 왜 모든 사이트가 HTTPS를 쓰지 않을까?

대부분의 개발자라면 HTTP나 HTTPS를 모르지 않을 것이다.  가장 많이 알려진 상식으로는

  • HTTPS가 HTTP보다 안전하다.
  • HTTPS는 HTTP보다 비용(시간, 자원 등)이 많이 든다.
  • 모든 사이트의 모든 연결이 HTTPS를 쓸 필요는 없다.

정도이다.

모두가 궁금해할만한 내용이라 인터넷에는 이와 관련된 다양한 의견과 문답이 있다. 검색해보면 쉽게 나오는데 이 중에서 HTTPS를 최대한 쓰는 것이 좋다는 답이 개인적으로 설득력이 있어 옮겨본다.

전 구글러이자 현 핀터레스트(Pinterest)의 개발자인 제프 넬슨(Jeff Nelson)의 ’10년 전이라면 모르겠지만, 지금은 가능한한 HTTPS를 쓰는 것이 좋다.’라는 답변하고 있다.  그는 자신의 의견에 대한 근거로

  • 암호화된 연결은 ISP나 정부의 추적 가능성이나, 멜웨어(malware)나 스푸핑(spoofing) 가능성을 낮춘다.
  • 256 bit 암호화는 cpu에게 큰 부담이 아니며, SSL 협상으로 지연되는 시간은 ~500ms 정도다.

등을 열거했다.   더 자세한 내용은 참고를 확인하자.

참고

HTTP 헤더의 Host 값 수정하기

지난 글에서 /system/etc/hosts 파일을 수정했다. 그런데 이 방법은 사용자 바이너리를 루팅하거나 엔지니어링 바이너리(주로 단말 제조사에서 사용)에서만 가능하다.

이번에는 파일을 직접 수정하는 대신에, HTTP request를 만들 때 헤더에 Host 값을 직접 넣자. Apache HttpComponents를 사용하는 경우,

HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost     = new HttpPost( "http://www.example.com" );
httpPost.setHeader("Host", "test.example.com");
HttpEntity requestEntity = new StringEntity( "{\"id\": \"Open\"}" ,
                                                         HTTP.UTF_8 );
httpPost.setEntity( requestEntity );
HttpResponse response = httpClient.execute( httpPost );

와 같이 Host 값을 설정할 수 있다.

참고로, Host 값을 따로 설정하지 않는 경우, URL의 Host 부분이 자동으로 채워진다. 위 경우 test.example.com로 채우지 않는다면 www.example.com이 채워질 것이다.

그 밖에

URL의 Host 부분만 잘라내는 방법이 궁금하다면 스택오버플로우의 이 글을 참조하자.

참고