Bryan Habana's intercept try kept Toulon's treble hopes alive as they battled to a 25-20 extra-time win over Leinster.
They will meet Clermont in a repeat of the 2013 final, but were pushed all the way in Marseille by a valiant Leinster side.
In soaking conditions, handling was difficult, with Leinster proving the more streetwise in the first half as they led 9-6 thanks to the boot of Ian Madigan.
The second half was more of the same, with Leigh Halfpenny knocking over two penalties to one from the Leinster centre, as the teams were forced to play extra-time.
However, the extra 20 minutes provided the excitement the opening 80 had lacked, with Ali Williams' yellow card proving the spark for the home side, who scored ten points with a man down including the Habana intercept.
Leinster had a mountain to climb but they took advantage of the final seconds of Williams' sin-binning to send Sean O'Brien over from a rolling maul to get back in it.
They couldn't get back over the line though, and Toulon held on to book their place at Twickenham in a fortnight's time.
The teams had previously met in the quarter-finals in 2014, when Leinster had kept it tight in the first half, only for Toulon to pull away in the second.
It wasn't the case this time, with neither side ever looking like running away with it until extra-time.
The first 80 minutes were poor fare, and while the conditions played a part, the skills on show were also lacking. Thankfully the 20 minutes of extra-time saw both sides show more ambition, with Toulon probably deserving of their victory.
The nerves seemed obvious from the start, with Madigan putting the opening kick-off dead in-goal.
Toulon showed none of those nerves, and almost had the first try after seven minutes when Fergus McFadden failed to gather Frédéric Michalak's up-and-under. Chris Masoe ended up diving on the loose ball but after consultation with the TMO it was clear the former All Black had set off from in front of the kicker.
Still, Wayne Barnes was playing advantage so Halfpenny had an easy shot to give the home side the lead.
Leinster had barely touched the ball but on their first incursion into Toulon territory they levelled matters, with Bakkies Botha offside as he dived for Matt Giteau's wild clearing kick, with Madigan slotting from out wide.
Toulon indiscipline would be the story of the opening half-hour, with Masoe and Williams emulating the South African in giving away kickable penalties, as Madigan stretched Leinster into a 9-3 lead in the pouring rain.
The defending champions responded with another penalty from Halfpenny, as Leinster strayed offside in defence, but they were dealt a big blow when Juan Smith had to leave his teammates after injuring his knee, replaced by Steffon Armitage late in the first half.
Armitage had been struggling with a knee injury of his own, which was why he was left on the bench by Bernard Laporte, but he made an immediate impact winning a penalty with his first involvement. However it was Leinster who led 9-6 at the break.
Laporte decided the time was right to take off Michalak early in the second half, with Giteau shifting across to fly-half, but Toulon missed the chance to level the scores when Halfpenny was off-target from out wide after Cian Healy had come in from the side at a maul.
Halfpenny made up for it just before the hour though as the Toulon scrum got the nudge on, with Halfpenny knocking over his third penalty to make it 9-9.
It was turgid stuff, and Leinster should have moved back in front but Madigan pulled a simple shot against the post after Williams was again penalised.
Toulon had a chance immediately afterwards after a Guilhem Guirado chargedown, but Leinster were saved by Healy's turnover in his own 22. However Jordi Murphy was pinged a minute later, handing Halfpenny a shot from 35 metres out. The Welsh full-back put Toulon back in front with 14 minutes to go in the game.
Leinster weren't done yet though, and Madigan made up for his earlier miss with a long-range effort after Juan Fernandez Lobbe kicked the ball while on the floor in a ruck, making it 12-12.
And they had their chance with two minutes when Jimmy Gopperth's drop goal drifted agonisingly wide, while Toulon had the final opportunity, but Delon Armitage's ambitious penalty from 60 metres out had neither the distance nor the direction with the final kick of regulation time.
That meant extra-time, with neither side really in the ascendancy.
The first chance went Toulon's way, with an Armitage turnover setting up a counter-attack, but as Jocelino Suta looked to be away, the play was called back for a forward pass in the build-up.
The defending champions had solved their scrum problems though, and earned a penalty that Halfpenny slotted from just over 40 metres out to put Toulon back in front.
The lead lasted barely a minute, when Suta grabbed Richardt Strauss round the neck in a ruck, giving Madigan the chance from wide on the left, and he made no mistake.
A potentially defining moment followed from the restart as Williams and Toner went up for a high ball. While the Toulon lock looked to be playing the ball, he was deemed to have played the man in the air, earning a harsh yellow card as a result.
Despite being a man down, Toulon refused to buckle, and after Masoe got in over a ruck, Halfpenny had just enough on his kick to put Toulon back in front.
Then with seconds remaining in the half, Madigan tried a huge miss-pass, but it was read by Habana, who picked off the pass and sprinted 50 metres to score. With Halfpenny's conversion, Toulon led 25-15.
Leinster needed a response, and got one when their rolling maul finally made progress, with O'Brien barrelling over. With Madigan off, Gopperth took over kicking duties, but pushed his effort wide.
The visitors needed one more try but Toulon managed to play the remaining minutes in Leinster territory before earning a final lineout and hanging on for the win.
Pens: Halfpenny 6
Yellow Card: Williams
Pens: Madigan 5
Toulon: 15 Leigh Halfpenny, 14 Delon Armitage, 13 Mathieu Bastareaud, 12 Matt Giteau, 11 Bryan Habana, 10 Frederic Michalak, 9 Sebastien Tillous-Borde, 8 Chris Masoe, 7 Juan Fernandez Lobbe, 6 Juan Smith, 5 Ali Williams, 4 Bakkies Botha, 3 Carl Hayman (c), 2 Guilhem Guirado, 1 Xavier Chiocci.
Replacements: 16 Jean-Charles Orioli, 17 Alexandre Menini, 18 Levan Chilachava, 19 Steffon Armitage, 20 Drew Mitchell, 21 Rudi Wulf, 22 Michael Claassens, 23 Jocelino Suta.
Leinster: 15 Rob Kearney, 14 Fergus McFadden, 13 Ben Te'o, 12 Ian Madigan, 11 Luke Fitzgerald, 10 Jimmy Gopperth, 9 Isaac Boss, 8 Jamie Heaslip (c), 7 Sean O'Brien, 6 Jordi Murphy, 5 Mike McCarthy, 4 Devin Toner, 3 Mike Ross, 2 Sean Cronin, 1 Cian Healy.
Replacements: 16 Richardt Strauss, 17 Jack McGrath, 18 Martin Moore, 19 Ben Marshall, 20 Dominic Ryan, 21 Eoin Reddan, 22 Gordon D'Arcy, 23 Zane Kirchner.
Venue: Stade Velodrome, Marseille
Referee: Wayne Barnes (Eng)
Assistant Referees: Nigel Owens (Wal), Greg Garner (Eng)
TMO: Graham Hughes (Eng)