A few questions for you - is the page on site1 and site2 essentially duplicates of each other? Or is there different content on both? If the pages are basically the same content (or exactly the same content), the most appropriate answer is to redirect the page on site1 to site2 and have that redirect return with a 301 status response code. The redirect will tell Google that the page has moved elsewhere and Google may decide to rank site2 in spot 1. If you are okay risking losing the ranking, then go this route.
The canonical is probably not the best route. A rel canonical is seen by Google as a suggestion. They could ignore it altogether or they could see it as a redirect. Personally, I've seen more instances of this approach hurting rankings than the redirects. Here is more about what Google says about cross domain canonical tags.
http://googlewebmastercentral.blogspot.com/2009/12/handling-legitimate-cross-domain.html
Ideally, the best answer is to leave site1 as the ranking domain since you have a decent ranking if you really want to keep the ranking and don't want to risk ranking loss. What is your reason for wanting to switch sites? Is there a way you can adjust content or design on site1 to accomplish the same thing? If you can alter site1's content or design (though, in hopefully small ways as to not be enough change to affect the ranking), then you'd be in the safest category of not risking a ranking loss.