Używasz szyfrowania asymetrycznego do uzgodnienia klucza symetrycznego, a następnie całą komunikację szyfrujesz kluczem symetrycznym. Możesz uzyć. np. RSA. Serwer przesyła klucz publiczny do klienta, klient szyfruje swój klucz kluczem publicznym i odsyła go do serwera, serwer deszyfruje i oboje używają go w szyfrowaniu symetrycznym np. algorytmem AES-256. Ten sposób jest jednak podatny na atak MITM. Możesz jednak ograniczyć atak MITM, poprzez właśnie certyfikaty self-signed. Pamiętaj jednak, aby używać kluczy odpowiedniej długości dla RSA to minimum 2048 bitów.