The Portuguese hit a first half penalty and then knocked in a rebound after the break as Real took full advantage of their counter-attacks.
Raphael Varane headed the third after 68 minutes while Jordi Alba got a late consolation.
Real Madrid will now take on the winners of Sevilla and Atletico Madrid who play on Wednesday, the capital side enjoying a 2-1 lead from their first leg.
Ronaldo has now scored in his last six visits to the Catalan capital and came out on top in his personal battle with Lionel Messi, who was largely anonymous in the game.
The Argentine, however, has the chance to respond when the pair meet again in the league at the weekend.
This was the vital game though for Real who trail leaders Barcelona by 16 points in La Liga after a poor campaign and it is their best chance of picking up some silverware outside of the Champions League, in which they are evenly poised against Manchester United after a 1-1 first leg draw at the Bernabeu.
“We knew how to play Barcelona and tactically we came out on top,” said Real ‘keeper Iker Casillas. “We were well positioned on the pitch and in all areas we were in control.
“It was a very strong performance and in defence we were superb. Cristiano was phenomenal. It was a 10 out of 10 performance and we deserve to be in the final.
“Cristiano is a vital player for us but while he had an excellent performance so did the whole team. He is a reference for us and has showed his capabililty not just in this game but in other Clasicos.
“Hopefully this result can now be a turning point for the side because this is a difficult stadium to play in. Now we are looking to do well in the Champions League and La Liga.”
There were no surprises in the Barcelona lineup with Andres Iniesta preferred in attack to David Villa which allowed space for Cesc Fabregas in midfield.
Jose Mourinho chose Varane, who did so well in the first leg, ahead of Pepe to partner Sergio Ramos in the heart of the Madrid defence while finally there was no space for the rejuvenated Kaka with Angel Di Maria starting on the right wing.
Barca began at a high-tempo with Iniesta firing wide from 20 yards and then Messi screwed an angled shot with his weaker right foot past the post from the edge of the six-yard box before two minutes were even on the clock.
While Barca had their usual attacking ethos they were not pressing with the same intensity high up the pitch and so when Real did pick up possession they were able to play their way out of defence.
Cesc had another effort which was comfortably blocked by keeper Diego Lopez before the visitors took the lead from a penalty after a breakaway which showed the danger they possess in attack, as well as Barca’s suspect defence which has now not kept a clean sheet in 12 matches in all competitions.
Ronaldo knocked the ball around Gerard Pique inside the area and his former Manchester United teammate brought him down for a spot-kick which the Portuguese converted.
Barca were hoping for a penalty of their own moments later but the referee waved away appeals for a foul by Alvaro Arbeloa on Cesc and it showed how the home side were becoming more frustrated at their inability to create clear-cut chances.
Real were defending well while they continued to threaten through Ronaldo counter-attacks.
Barca did win a free-kick on the edge of the area for a foul by Arbeloa after on Iniesta for which he was booked after 37 minutes and Messi’s shot went a whisker past the post.
Barca attacked with renewed vigour after the break but it was Real who scored again after 57 minutes.
Di Maria skipped round Carles Puyol and ‘keeper Victor Valdes could only parry his shot to Ronaldo who kept his composure to slot home.
The Catalan side looked stunned and lost their shape at the back as Real cut them apart. Varane got their third as he outjumped the Barca defence at a corner to head in off the crossbar.
A minute from the end Barca did finally get on the scoresheet with Alba knocking in a ball over the top from Iniesta.