Borussia Dortmund produced a fine away performance to beat Paris St-Germain and reach their first Champions League final since 2013.
Dortmund held a 1-0 advantage following the first leg of the semi-final and doubled their lead when Mats Hummels was left unmarked five yards out to head in from Julian Brandt's left-wing corner.
That goal came just after PSG's Warren Zaire-Emery wasted a glorious chance as he volleyed against the post from close range early in the second half.
PSG hit the upright twice in the opening match in Germany and, after falling 2-0 behind on aggregate, again struck the post through Nuno Mendes.
The hosts thought they had been given a penalty and a potential lifeline when Italian referee Daniele Orsato pointed to the spot, only to instantly change his mind and rule that Hummels' foul on Ousmane Dembele had been just outside the area.
PSG have never been European champions, losing in the 2020 final, and Dortmund produced an excellent defensive display to frustrate the French title winners.
Kylian Mbappe, in his last European match for PSG before joining Real Madrid in the summer, had an effort deflected on to the crossbar, before Vitinha fired against the bar too - the sixth time overall his side had hit the frame of the goal in the tie.
The final will be at Wembley on Saturday, 1 June (20:00 BST) and could be an all-German affair, just as it was in May 2013 when Bayern Munich beat Dortmund 2-1 in London.
Bayern and Real are in the second 2024 semi-final and the first leg ended 2-2 in Germany, with the second leg in Spain on Wednesday (20:00 BST).
Dortmund are aiming to become European champions for the second time in their history after they defeated Juventus 3-1 in the 1997 final.