French forward Kylian Mbappe was sent off for a poor challenge with Paris Saint-Germain already 3-0 up thanks to video technology.
Goals from Thomas Meunier, Marquinhos and Giovanni Lo Celso had the Parisians in a strong position before the red.
But holders PSG barely held on with 10 men after Diafra Sakho and Sanjin Prcic struck late.
The visitors went ahead in the 24th minute when full-back Meunier struck a spectacular volley.
Rennes ace Wahbi Khazri was denied an equaliser on the stroke of halftime for handball.
PSG doubled their advantage nine minutes into the second half when Marquinhos scored from close range.
Four minutes later, Lo Celso scored PSG’s third goal when his shot was poorly handled by keeper Abdoulaye Diallo.
Mbappe was sent off in the 63rd for a rough tackle on Ismaila Sarr.
And the 10 men allowed Sakho and Prcic to pull two goals back in the last five minutes before tightening up to reach the final. The game ended in 2-3.