이 글에서는 http와 https에 대해서 쓰지 않습니다. 단지, 날라가는 패킷들을 보면서, 어떤 차이가 있는지만 실습해 보는 글입니다. 그러니, 자세한 정보를 보러 오셨다면, 여기보다는 공신력 있는 사이트들을 보시는 게 더 좋을 듯 합니다.

 


 인터넷 창을 보시다 보면, 대부분의 사이트에는 자물쇠가 있다는 것을 알 수 있어요.

 

 연결이 안전합니다. 그런데 어떤 사이트는 그렇지 않은데요. 그 차이가 무엇인지 제가 만들고 있는 토이프로젝트를 가지고 간단하게 실습해 보겠습니다.

 

 

 먼저, maven으로 패키징 된 제 토이 프로젝트를 실행해 보시면, Tomcat initialized with port(s): 7780 (http)가 뜨는데요.

 

 

 /borrow에 POST 요청을 보내 봅시다. 이것은 bookId가 2이고, userId가 2인 borrow order를 추가하라는 명령입니다.

 

 

 그랬더니 요청으로 500이 떨어지는데요. 사실 이것은 제가 book id를 unique 제약조건으로 걸어놓았는데, 2번 책을 또 빌려가는 모양새가 되어서, exception이 떨어져서 그렇습니다.

 

 

 wireshark로 본 패킷들입니다. 이 중에 HTTP/JSON에 있는 내용을 볼 겁니다.

 

 

 그러면, bookId가 2인 것과, userId가 2라는 정보가 그대로 평문으로 보내졌다는 것을 알 수 있어요. 여기서는, bookId와 userId가 평문으로 보내졌지만, 만약에 암호가 평문으로 보내진다면 어떨까요?

 


 https를 적용해 봐야 겠어요. 이것은 TLS나 SSL을 이용하는데요. Secure, 즉 암호화가 핵심인 프로토콜이에요. 뭔가 tenlet하고 ssh하고 관계가 비슷해 보이는 것은 기분 탓이 아닐 거에요.

 

 제 서버에 keystore.p12를 추가했어요. key-alias는 spring으로 설정해 놓았고, key-store-type은 PKCS12로 설정했어요.

 

 

 ssl 연결하기 위한 옵션은 그리 복잡하지는 않습니다. server.ssl에 여러 옵션들이 있는데요. key-store-password에 비밀번호를 입력합니다.

 

 그리고, key에 대한 정보들을 추가합니다. 다음에 server.https2.enabled를 true로 설정했습니다. 그리고 나서, 다시 패키징을 하고, 서버에서 실행을 시켜 보겠습니다.

 

 그러면, http가 아닌 https가 로그에 찍혔음을 알 수 있어요. 저 인증서 파일은 제가 제 서버에서 self로 sign 한 것이므로, 잘못된 인증서입니다. 그래서 postman에서는 오류가 나더라고요. 저는 swagger를 토이 프로젝트에 구축해 놓았으니, swagger-ui로 테스트를 해 보도록 하겠습니다.

 

 요래 입력하고, Execute를 눌러 보겠습니다.

 

 

 그러면 똑같이 500 응답이 오게 되는데요.

 

 

 http를 적용했을 때와는 다르게 추가된 과정이 몇 개 보입니다. 그 중 하나는 서버와 클라이언트 간에 Cipher spec 등을 교환하는 것입니다. 이러한 메타 정보들을 통해서, 패킷들을 암호화 시키게 됩니다.

 

 Application Data라고 온 것을 눌러 보겠습니다.

 

 

 그러면 뭔가 이상한 문자들의 조합이 잔뜩 뜨는데요. 제일 중요한 것은 패킷 어디에도 bookId가 2이고, userId가 2인 정보가 보이지 않았다는 것입니다.