A Seremaia Bai drop-goal in extra time saw Castres beat Montpellier 22-19 in Saturday's Top 14 semi-final in Lille.
Castres will now defend their championship title in a rematch of last year's final against Toulon at the Stade de France in Paris on May 31.
With the scores locked at 19-all after a tense 80 minutes in an engrossing encounter, two additional halves of 10 minutes were played with the defending champions' resilient defence holding off Montpellier's impressive attacking play.
Indeed, Montpellier will harbour a number of regrets having done most the playing and dominating for large parts of the second half.
Castres led 13-10 at the interval thanks to a try from Antonie Claassen and a couple of penalties from Rory Kockott while Montpellier had replied via a Rene Ranger try and drop from FranÃ§ois Trinh-Duc.
The second half turned into a battle of the place-kickers as Kockott and Trinh-Duc traded three-pointers.
Montpellier started in terrible fashion as Ranger was shown a yellow card inside 20 seconds after taking Castres centre Romain Cabannes out in the air.
Castres flank Yannick Caballero came close to scoring after collecting a cross-field kick from Remi TalÃ¨s but lost the ball in the process of going over the line as Montpellier number eight Alex Tulou made a desperate tackle. Castres scrum-half Kockott was nevertheless able to open the scoring as the ref came back for a penalty for pulling down a maul.
After a hectic opening ten minutes, Castres wing Remy Grosso was sent to the sin bin for taking opposite number Timoci Nagusa out in the air.
Montpellier fly-half Trinh-Duc drew his side level with neat drop goal after 25 minutes as compensation for a period of sustained pressure.
Kockott put the defending champs back in front with a monster penalty from 55m although he sent his next effort wide from the same distance.
The game's first try came on the half-hour mark when Claassen muscled his way over off the back of the advancing Castres scrum. Kockott landed the easy conversion to put CO up 13-3.
The reply from Montpellier was immediate though as Ranger touched down under the sticks for a great try after a break and offload from Wynand Olivier, who had been set free by Trinh-Duc.
The Montpol playmaker added the extras to leave the scores at 13-10 which is was how it would stay until the break thanks to a try-saving tackle from Montpellier full-back Pierre Berard on Grosso just before the half-time hooter.
Kockott's third penalty stretched the gap to six points shortly after the restart but the Montpellier setpiece began to gain the upper hand and Trinh-Duc was able to reply with two of his own to level the scores at 16-16 on the hour mark.
The battle of the place-kickers continued, swapping penalties as the teams entered the final ten minutes all-square.
TalÃ¨s had an opportunity to win the game with a drop goal from right in front in the final minute, but sent his effort well wide.
The game went into extra time and Castres were again denied a match-winning try when Timoci Nagusa dislodged the ball from the gasp of Remi Lamerat as the centre crossed.
But veteran Fijian centre Seremaia Bai slotted a drop just before the end of the first additional 10-minute half to put Castres ahead - for good this time - by the narrowest of margins.
Kockott missed with a penalty attempt a minute into the second period and despite Montpellier twice having the opportunity to take advantage of five metres scrums, Castres came away with the ball to seal their third play-off win over Montpellier in as many years.
Pens: Trinh-Duc 3
Yellow card: Ranger
Pens: Kockott 4
Yellow card: Grosso
Montpellier: 15 Pierre Berard, 14 Timoci Nagusa, 13 Anthony Tuitavake, 12 Wynand Olivier, 11 Rene Ranger, 10 FranÃ§ois Trinh-Duc, 9 Jonathan Pelissie, 8 Alex Tulou, 7 Mamuka Gorgodze, 6 Alexandre Bias, 5 Thibault Privat, 4 Robins Tchale-Watchou, 3 Nicolas Mas, 2 Charles Geli, 1 Mikheil Nariashvili.
Replacements: 16 Mickael Ivaldi, 17 Yvan Watremez, 18 Sitaleki Timani, 19 Fulgence Ouedraogo, 20 Benoit Paillaugue, 21 Lucas Dupont , 22 Anthony Floch, 23 Paea Fa'anunu.
Castres:15 Brice Dulin, 14 Remy Grosso, 13 Romain Cabannes, 12 Remi Lamerat, 11 Max Evans , 10 Remi Tales, 9 Rory Kockott, 8 Antonie Claassen, 7 Yannick Caballero, 6 Piula Faasalele, 5 Rodrigo Capo Ortega, 4 Richie Gray, 3 Ramiro Herrera, 2 Brice Mach, 1 Yannick Forestier .
Replacements: 16 Mathieu Bonello, 17 Saimone Taumoepeau, 18 Christophe Samson, 19 Jan Bornman, 20 Cedric Garcia, 21 Daniel Kirkpatrick, 22 Seremaia Bai, 23 Mihaita Lazar.
Venue: Stade Pierre Mauroy (Grand Stade de Lille)
Referee: Pascal Gauzere