The world number one has never won the tournament and will play in only his second final after he lost to today's opponent in 2010.
In the ninth game of the first set, Nadal broke Federer, before the six-time champion hit back to make it 5-5.
Nadal quickly broke the Swiss once again, as he won the next game to 15 and held his serve to wrap up the set 7-5.
In the second set, Nadal broke after five games and from there went on to win the set 6-3, after two errors from Federer sealed his fate.
Nadal will play the winner of the semi-final between Novak Djokovic and Stanislas Wawrinka.