The defending European champions were looked shaken in the opening half as former Real forward Alvaro Morata put Juve in front inside ten minutes, but Carlo Ancelotti’s men responded well and went into the break at 1-1 thanks to Ronaldo’s header.
It was all to play for in the second period following a ferocious opening half, but Juve soon reasserted their dominance and claimed the advantage through Carlos Tevez’s penalty.
The Argentine hitman was clumsily brought down by Dani Carvajal and slammed home his resulting spot kick to hand the Italian giants what could be a vital lead ahead of next week’s second leg in the Spanish capital.
It was an uncharacteristic performance from Champions League holders Real, who gave away the ball cheaply and allowed Juventus to dictate in the early stages.
The Turin outfit, who have lost only once in European competition since moving to their new Juventus Stadium, made the most of their early dominance, forcing a nervy Iker Casillas into a handful of saves as Stefano Sturaro hit one from range and Morata looked for a crafty chip.
And their lightning-quick start bore fruit as Morata found the net moments later, tapping in from close-range after Casillas failed to hold Tevez’s initial drilled effort.
Rattled by Juve’s relentless pressure, Madrid looked in real trouble but then soon found some rhythm to their play, with Toni Kroos and Isco forcing good saves from goalkeeping icon Gigi Buffon.
Ronaldo cut a frustrated figure throughout the first half, threatening to explode at times as his team-mates failed to provide for him, but, after dragging a shot wide from a decent position, the Portuguese star eventually pulled his side level with perhaps the easiest of finishes of his record goal tally.
James Rodriguez and Carvajal linked up brilliantly on the right wing, dinking a one-two over their markers before sending in a perfect cross for a criminally unmarked Ronaldo, who was free to nod into an empty net.
Real went into the break on top, with Rodriguez hitting the crossbar with a diving header on the stroke of half-time, but Juve came out fighting in the second period.
A spritely Carlos Tevez was a constant pest for the Spanish giants with his determined and dangerous runs, and he proved too much for Carvajal on the hour mark.
The defender was lucky to not be sent off for his clumsy challenge, and surprisingly was not booked at all by English referee Martin Atkinson, but it mattered little as former Man City striker Tevez put Juve in front from the spot.
Massimiliano Allegri’s men should have sealed it in the closing stages only for substitute Fernando Llorente to squander two gilt-edged chances – first failing to find the net from an angle after rounding international team-mate Casillas, and then nodding a tame header straight at the keeper from Andrea Pirlo’s whipped free-kick.
Llorente may come to rue those missed opportunities, but an in-form Juventus will still be buoyed by a dazzling performance against the defending champions ahead of their second leg trip to Madrid, as the sides go head-to-head once more for a place in the Berlin final.