Juventus started slight favourites courtesy of their recently-secured Italian title and the outstanding team performance which accounted for holders Real Madrid in the second leg of their semi-final.
Maldini was forced to make a vital tackle on the edge of his own area to deny David Trezeguet a shooting chance after Davids and del Piero had linked to take Juve from one end of the field to the other. Paolo Montero was also in the right place to prevent Shevchenko latching onto a cross from Kakha Kaladze which had just evaded former Juve striker Filippo Inzaghi.
As usual, Davids was the heartbeat of the Juventus side, robbing Andrea Pirlo with a brilliant tackle inside his own half before releasing Gianluca Zambrotta, whose run was ended by Gattuso’s crude lunge.
Inzaghi went down in the box under pressure from Igor Tudor, but referee Markus Merk waved the penalty protests away. Milan were further aggrieved a minute later when Inzaghi pulled a cross back to Shevchenko, who lashed home his shot, only to be disappointed by an offside flag.
Buffon then proved his worth with a brilliant low save to deny Inzaghi after Shevchenko had intercepted a stray Montero pass.
Alessandro Costacurta was the first man yellow carded for a couple of late tackles on Zambrotta, then Thuram lashed over the bar after del Piero’s free had been cleared into his path.
Much of Juve’s best work was tending to break down before it could threaten the Milanese goal but finally Zambrotta skipped past Gattuso and drove to the edge of the area, providing del Piero with a square pass which he curled harmlessly over.
Seedorf was next to send Zambrotta tumbling and for the third time Del Piero delivered a perfect free-kick into the box which none of his team-mates could make anything of.
Rui Costa came within inches of putting Milan in front when he took one touch to control Inzaghi’s square pass then struck a low shot which left Buffon stranded, but ran just wide.
Just before the break, Shevchenko caught Tudor with a challenge the Croatian defender did not recover from, forcing coach Marcello Lippi to introduce Alessandro Birindelli.
Milan’s movement from defence to attack was spellbinding and Buffon was forced into another save from Inzaghi as the half drew to a close.
Lippi made a second change at the interval, bringing on Antonio Conte for Mauro Camoranesi in the hope of getting a foothold in midfield. It almost had an immediate impact as within two minutes of his arrival Conte sent a diving header against the crossbar after Zambrotta dropped a superb cross into the Milan penalty area. With Didi grounded, Trezeguet fancied his chances of netting the rebound, only for Alessandro Nesta to muscle him out of the way. Nevertheless, Juventus were starting to get on top as Milan resorted to muscular methods to keep them out.
Maldini came within inches of putting Milan in front when he met Pirlo’s free-kick with a superb header which whistled just wide, then Rui Costa lashed a 20-yard volley over the bar after a Pirlo corner had been cleared into his path.
Lippi made his final substitution, replacing Davids with Marcelo Zalayeta, while Brazilian Junior Roque came on for Milan, replacing Costacurta.
The next chance fell to Juve when del Piero floated in another free-kick, which Zalayeta flicked well wide and silver goal extra-time loomed as the match entered its final quarter.
Tacchinardi was yellow carded for a foul on Gattuso, then Milan coach Carlo Ancelotti opted to introduce another Brazilian Serginho for Andrea Pirlo, with the mighty Rivaldo still kicking his heels on the bench.
As the match entered stoppage-time, Seedorf attempted a shot which Buffon saved comfortably to send the tie into silver goal extra-time.
Zalayeta sent an early extra-time header into the side-netting after Zambrotta had taken advantage of Roque's slip to send a cross spinning to the far post. Roque then appeared to pull a hamstring as he lost his footing attempting to reach Seedorf’s pass.
But there were no goals in extra-time and so that penalty shoot-out which AC Milan thanks to Shevchenko’s winner.
AC Milan: Dida, Costacurta, Nesta, Maldini, Kaladze, Gattuso, Rui Costa, Seedorf, Pirlo, Shevchenko, Inzaghi.
JUVENTUS: Buffon, Ferrara, Montero, Tudor, Zambrotta, Thuram, Tacchinardi, Davids, Camoranesi, Del Piero, Trezeguet.
Referee: Markus Merk (Germany).