3-3 on aggregate (Milan win on away goals)
Massimo Ambrosini's late goal broke PSV Eindhoven's hearts as AC Milan reached the Champions League final where they will meet Liverpool in Istanbul.
PSV, 2-0 down from the first tie, made the perfect start when Ji-Sung Park superbly lashed home on nine minutes.
Just past the hour Young-Pyo Lee crossed for Philip Cocu to head home and level the tie on aggregate.
Ambrosini headed in Kaka's cross and although Cocu's superb volley gave PSV hope, Milan's away goal proved crucial.
With a two-goal advantage from the first leg, Milan coach Carlo Ancelotti had opted to pack his midfield and deploy Andriy Shevchenko as a lone striker.
With Milan's defensive reputation the plan looked well-founded, but the Serie A side had not bargained for a PSV performance of immense ambition and no little skill.
Milan's strategy began to unravel as early as the fifth minute, Paolo Maldini bravely heading clear as Jan Vennegor of Hesselink attempted an ambitious bicycle kick.
If Maldini was left feeling groggy, Milan suffered an even more damaging blow on nine minutes.
Park lashed the ball past Dida after Hesselink held the ball up under intense pressure from Jaap Stam, the South Korean more than making amends for the succession of chances he wasted in the first leg.
Hesselink's aerial ability was also causing Milan problems notably when the PSV striker flicked a Mark Van Bommel free-kick against the bar.
Late in the first-half another Van Bommel set piece exposed Milan's defensive nervousness, though Alex was unable to get a clean header in.
PSV's centre-back soon had his own defensive concerns, the powerful Brazilian defender throwing his body in the way of goal-bound shot from Kaka.
Early in the second-half quick thinking from Theo Lucius rescued Alex, the PSV right-back racing across to steal the ball from Shevchenko.
Just past the hour PSV levelled the tie as Cocu powered a header past Dida following superb wing play from Lee, who with a stepover and a change of pace worked space for the cross despite the close attentions of Cafu.
Ancelotti threw on an extra striker in Jon Dahl Tomasson to provide extra support for Shevchenko, while PSV coach Guus Hiddink also introduced forward Robert.
The Brazilian immediately flashed a shot across Dida that the Milan keeper tipped away while the PSV keeper Gomes needed to be alert to save an Ambrosini header after a Milan corner.
But as the game moved into stoppage time Ambrosini once more arrived unmarked in the box to direct a header past Gomes.
Cocu's wonderful volley after more good work from Hesselink briefly revived PSV's hopes but Milan held on to reach their 10th European Cup final.
The final is scheduled for May 25.
Milan have won the European Cup six times, last claiming the trophy two years ago on penalties against Juventus at Old Trafford.
PSV: Gomes, Lee, Alex, Bouma (De Pinho 70), Van Bommel, Park, Cocu, Vogel, Lucius, Vennegoor of Hesselink, Farfan.
Subs Not Used: Zoetebier, Addo, Bogelund, Van der Schaaf, Afellay, Sibon.
Goals: Park 9, Cocu 65, 90.
AC Milan: Dida, Cafu, Maldini (Kaladze 46), Nesta, Stam, Gattuso, Seedorf (Tomasson 69), Pirlo, Ambrosini, Shevchenko, Kaka.
Subs Not Used: Abbiati, Costacurta, Rui Costa, Serginho, Crespo.
Goals: Ambrosini 90.
Agg: (3-3) AC Milan win on Away Goals rule.
Ref: Terje Hauge (Norway).