Leading 1-0 after the first leg, a resolute and well-organised Dortmund side withstood more PSG pressure before going ahead through Mats Hummels’ 50th-minute header.
That goal proved to be enough as while PSG continued to press – hitting the woodwork four times on the night and six times in the tie – Dortmund clinched successive 1-0 wins to reach the final.
Borussia Dortmund will face either Real Madrid or Bayern Munich in the Champions League final on June 1. That semi-final is finely poised at 2-2 ahead of Wednesday’s second leg at the Bernabeu.
Dortmund won their sole Champions League title in 1997 and are contesting their first final since they lost the 2013 showpiece event to Bundesliga rivals Bayern Munich.
PSG, who are still searching for their maiden Champions League trophy, started well and had the first shot on target inside six minutes, though Kylian Mbappe’s tame volley was comfortably saved.
Goncalo Ramos, one of two changes from the Paris Saint-Germain side that lost in Germany last week, swivelled and rifled wide with another effort.
But Dortmund looked dangerous, breaking with speed on multiple occasions through Manchester United and Chelsea loanees Jadon Sancho and Ian Maatsen.
Julian Ryerson came close for the visitors when he smashed into the side-netting and PSG’s Ousmane Dembele had a chance from a similar position that he blazed over the bar.
Mbappe fluffed his lines with another chance ten minutes before half-time and the home fans were relieved to see Italian giant Gianluigi Donnarumma deny Karim Adeyemi with a great save following a Dortmund counter-attack.
Given what was at stake, it was an underwhelming first-half display from PSG but they came out quickly following the restart and should have scored when the ball dropped to Warren Zaire-Emery at the back post, but his volley hit the actual post, the third time PSG had hit the woodwork in the tie.
Just when it looked like PSG were gaining control, Dortmund – winners in 1997 and runners-up 11 years ago – went ahead on the night and 2-0 up in the tie, Hummels finding space in the box to head home from an inswinging corner.
It looked like the goal had knocked the stuffing out of PSG, who won the Ligue 1 title with three games to spare, and for a while Dortmund looked the more likely to score again and put the tie to bed.
But Luis Enrique’s side twice came close to reducing the deficit with 30 minutes remaining, Ramos firing over before Nuno Mendes struck the post with a long-range effort.
PSG, who lost their only Champions League final to Bayern in 2020, looked increasingly desperate as they continued to be frustrated by Edin Terzic’s side, the subdued Mbappe blazing over and several players shooting from distance.
Hummels, 35, had the ball in the back of the net again but the goal was correctly disallowed for offside, but the French champions did little to take advantage of the reprieve.
A combination of Gregor Kobel and the bar denied Mbappe before the woodwork once again came to Dortmund’s rescue, this time Vitinha rattling the bar with a powerful strike.
Boos and whistles rang out around the Parc des Princes as PSG’s Champions League exit was confirmed and Borussia Dortmund, just fifth in the Bundesliga, reached the final.
Dortmund will now keep an eye on Wednesday’s second semi-final between Real Madrid and Bayern Munich and prepare to meet either Carlo Ancelotti or Thomas Tuchel’s side at Wembley.
For more stories like this, check our sport page.
Follow Metro Sport for the latest news on
Facebook, Twitter and Instagram.
MORE : Rio Ferdinand reveals the ‘only way’ Jadon Sancho will return to Manchester United
MORE : Real Madrid boss Carlo Ancelotti defends Jude Bellingham over Harry Kane penalty mind games
MORE : Real Madrid can reach the Champions League final to leave Harry Kane and Bayern Munich without silverware