Juventus went through 4-3 on aggregate after the first leg ended 2-1 for nine-times European champions Real and Marcello Lippi's side will now face Milan, who got past city rivals Inter in Tuesday's other semi-final, in the final at Manchester United's Old Trafford on May 28.
First-half goals from David Trezeguet and Alessandro Del Piero put Juventus in command of the tie against the Spaniards who have won the competition three times in the last five years.
After the break Real's Luis Figo missed a chance to bring his side level on aggregate when his weak penalty was saved by Juve keeper Gianluigi Buffon in the 67th minute.
Pavel Nedved added a third six minutes later but then former Juventus favourite Zinedine Zidane pulled one back in the 89th minute to make the hosts sweat through five tense minutes of added time before the passage was assured.
BITTER NOTE
But there was a bitter note for Juventus as Nedved, their driving force this season as they also retained the Italian league title, will miss the final after picking up a booking in the second half for a needless foul on Real sub Steve McManaman.
The all-Italian final completes a remarkable turnaround in fortunes for Serie A clubs after not a single team reached even the quarter-final stages in the past two seasons.
Juventus's defeat to Real in 1998 was the last time an Italian side reached the final while their penalties victory over Ajax Amsterdam two years before that was the country's last success.
Juventus knew that to have a chance of lifting Europe's premier trophy for a third time they would have to produce something special. They did just that, attacking from the outset against a shaky Real defence badly missing their usual protective shield of injured French midfielder Claude Makelele.
They were rewarded in the 12th minute when Nedved's deep cross from the right was headed down by Del Piero to Trezeguet who did well to turn the ball in from a tight angle.
Two minutes before the break Juventus doubled their lead when Del Piero made some space for himself on the edge of the area and beat Casillas with a well-placed low shot.
Seven minutes into the second half Real coach Vicente Del Bosque introduced Brazilian striker Ronaldo and 14 minutes later the World Player of the Year was brought down by Paolo Montero for the penalty.
The Real bench were furious that the Juventus defender, who had already been booked, escaped a red card and they were fuminng even more when Figo's penalty was easily saved by Buffon.
Real's hopes of reaching a record 13th final looked to be shattered when the hugely impressive Gianluca Zambrotta put Nedved through with a superb pass and the Czech crashed the ball past Casillas to make it 3-0.
LATE TENSION
Zidane's neatly taken goal provided some late tension but it could not prevent a richly-deserved success.
"I'm very happy for the squad, we really put on a great performance," said Buffon.
"I'm very happy that the Champions League is coming back to Italian soil, I only hope that it ends up in Turin."
Vicente del Bosque told Spanish state television: "We fought hard but in the end it just wasn't possible.
"I don't think we played a bad game. We were up against a great rival. We didn't lose because of our defence. For good or bad, it was the whole team that lost."
McManaman added: "After having a 2-1 lead at home this is a big disappointment for us, a big failure."
More from rediff