Вы можете безопасно обмениваться данными с кем-то только в том случае, если у Вас обоих есть общий ключ для их шифровки и расшифровки, о котором больше никто не знает. Проблема в том, как сделать так, чтобы он оказался у вас обоих, но при этом никто его не узнал. Т.е. как передать ключ по открытому каналу не скомпроментировав его. Ассиметричное шифрование как раз вот про это.
Алгоритм этой операции такой:
1. Сервер передает клиенту публичный ключ по незащищенному соединению.
2. На основе публичного ключа сервера клиент создает разделяемый (общий) ключ, сохраняет его у себя.
3. Клиент шифрует свой разделяемый ключ и в зашифрованном виде передает серверу.
4. Сервер расшифровывает зашифрованный разделяемый ключ c помощью своего приватного ключа и получает разделяемый ключ у себя.
Ассиметричное шифрование свою задачу выполнило - handshake состоялось. Далее клиент и сервер имея разделяемый ключ могут обмениваться уже симметрично зашифрованными данными.