성능때메 대칭키로 암호화해야 하는데 대칭키를 그냥 주고받을 수 없으니까(보안땜시) 서버가 발행해준 공개키로 대칭키 주고 받는거고.. (여기선 클라가 먼저 대칭키를 유추할 수있는 premaster secret을 서버로 보내줌(공개키로 encrypt해서).. 서버는 private key로 premaster secret알아내고.. 이것저것 조합해서 대칭키 알아냄)
근데 비대칭키 보내주기 전에 나한테 공개키를 보내 준 서버가 제대로 된 서버인지 알아야 함. (중요) (중간에 다른 누가 실서버 공개키는 가로채고 가짜 공개키를 보내줄 수도 있기 때문). 고로 서버가 공개키와 함꼐 보내준 인증서(root certificate)가 root CA에서 발행한건지 체크함.. 보통은 root CA에서 직접 발행해주지 않고 중간 발행자를 통함으로 그 중간 발행자가 root CA 위임인지 확인하기 위해 intermediate certificate를 또 사용함.. 두 cerificate다 서버에서 browser로 보냄..
만약 ssl을 사용하지 않고.. 직접 클라와 서버가 저 짓(공개키보내고 대칭키 encrypt해서 다시 보내는..)을 하면 문제가 없나.. 문제가 됨. 위에 언급했듯이 누군가 중간에서 실제 서버인척하는게 가능함.. 실 서버의 공개키는 가로채고 새로 공개키를 발급해서 클라한테 줌.. 클라가 공개키로 encrypt 한 대칭키를 건네주면 중간녀석은 비밀키(아까 공개키와 함께 생성한..)로 대칭키를 알아 낼 수 있음.. 그리고 실 서버한테 다시 가로챈 공개키로 대칭키를 encrypt해서 보내줌..
결국 브라우저가 신뢰할 수 있는 서버인지 체크하는게 중요.. ssl 안쓰면 보안 의미없음..
https://support.microsoft.com/en-us/kb/257591
http://security.stackexchange.com/questions/7421/how-do-the-processes-for-digital-certificates-signatures-and-ssl-work
http://security.stackexchange.com/questions/63971/how-is-the-premaster-secret-used-in-tls-generated
https://www.wormly.com/help/ssl-tests/intermediate-cert-chain