Depends how secure you want it to be. Do you want to be safe against MITM, against passive attackers, against active attackers, against replay attacks, ... and so on.
Even though that posting links is not that good, I would strongly suggest to read that paper:
"Using Encryption for Authentication in Large Networks of Computers" - Needham, 1978.
On the second page it has a nice description of quite a secure protocol for that. ("Protocol 2. With Public-Key Algorithms "), though you would have to modify it since you don't have a CA which both parties trust. (and, as a result, be vulnerable to some attacks)
Also, take a look on TLS. TLS could be with server authentication, client authentication, or both present or both missing. Option 4 is for you, since you do not have any CA's mentioned in your question.