World number one Djokovic, who already has the Wimbledon, US Open and Australian Open titles in his possession, will become only the third man in history to hold all four Grand Slam trophies at the same time if he wins Sunday's final.
Defeat for Federer, the 2009 champion who was undone by 46 unforced errors, left him waiting once again to add to his record 16 majors, the last of which came at the 2010 Australian Open.
But Djokovic knows that Sunday's task will be even harder where Nadal, defeated only once in 52 matches at Roland Garros, is chasing his own piece of history as he tries to become the first man to win seven French Opens.
"I am happy to be in the final here, it's always difficult to play against Roger," said Djokovic, who had his 43-match winning streak ended by Federer at the same stage of Roland Garros 12 months ago.
"It's a dream to be in the final, but Rafa, who always plays so well here, will be the favourite."
Both Djokovic and Federer had looked far from convincing in reaching this stage.
Djokovic came back from two sets to love down to beat Andreas Seppi in the fourth round before saving four match points against Jo-Wilfried Tsonga in a five-set quarter-final.
Federer had also been two sets to love down to Juan Martin del Potro in his five-set, last eight match before battling back.
In a tight opening set, Federer had the first break to lead 3-2 but couldn't capitalize when Djokovic hit straight back.
The Serb then served two love games to lead 5-4 before the first set was his when Federer mis-hit a forehand which ballooned beyond the tramlines.
But the Swiss edged the early break in the second set in a game which featured a gruelling 36-shot rally won by Federer with a volley off a Djokovic 'between the legs' shot.
The world number three held to love and broke again for 3-0.
Djokovic then capitalised on a sloppy Federer service game to break back at 1-3 and held for 2-3 before the third seed steadied for a 4-2 advantage.
The Serb, who had confidently defeated Federer in the semi-finals on clay in Rome in straight sets just last month, was under siege again in his next service game, saving three break points.
In a topsy-turvy set, Djokovic broke for 4-4 but allowed Federer back in the driving seat to lead 5-4.
But the 16-time Grand Slam title winner couldn't shake off the world number one who broke again in the 10th game, backed up by a hold for 6-5 and then claimed the set courtesy of a loose backhand and a wild forehand by the Swiss.
Djokovic was in the ascendancy now, breaking for 4-2 in the third and taking the match when Federer buried a backhand return into the net.
Defeat ended Federer's hopes making a 24th Grand Slam final.