Los Blancos produced a far from convincing performance even after Giorgio Chiellini was given a straight red card on 48 minutes for an elbow on Ronaldo.
The Portuguese forward gave Madrid the lead four minutes into the game but Spanish striker Fernando Llorente equalised after 23 minutes before Ronaldo restored the hosts' lead five minutes later from the penalty spot.
Iker Casillas was called into action barely a minute after kick-off, tipping a long-range shot from Claudio Marchisio over the bar.
But it was Madrid who took the lead as Ronaldo beat the offside trap to get onto the end of a through ball from Angel Di Maria and calmly rounded Gianluigi Buffon to slot into an empty net.
Juventus did not drop off after the goal and Carlos Tevez had two shots off target with Martin Caceres also volleying over before Llorente levelled after 23 minutes.
The play originated with a quick ball from Andrea Pirlo out to Caceres on the right. His deep cross looked to be going out but Paul Pogba managed to head it towards goal and, although Casillas was able to keep it out, he could only clear the ball out to Llorente, who poked into the bottom corner.
Pogba came close to putting Juve ahead a few moments after the equaliser but shot just wide of the left hand post.
Madrid struggled to impose their authority on the game but were back in front soon enough when Chiellini brought Sergio Ramos down as Juve defended a free-kick and, after a moment's hesitation, referee Manuel Grafe pointed to the spot.
Buffon dived the right way but Ronaldo's penalty was too powerful for him to keep out.
Pirlo then shot over the bar from close range, albeit from a tough angle, and at the other end Ronaldo fired several feet wide of the right hand post.
Although Juve went into the break a goal behind, their performance would have given them belief they could of turn things round.
But their hopes were dashed barely five minutes into the second half when Chiellini was sent off for an elbow on Ronaldo as the Portuguese attacked down the right hand side.
Karim Benzema should have put the game to bed after receiving a low pass from Alvaro Arbeloa three yards in front of the near post but somehow missed the target, provoking a chorus of boos from the Bernabeu faithful.
The Frenchman's low level of confidence became more apparent a few minutes later when he failed to control a simple ball from Luka Modric which would have put him through one-on-one with Buffon.
Barely a minute later, he was replaced by Gareth Bale, who was unable to have a great impact on the game.
Despite their man advantage, Madrid did not look in control and Juventus substitute Sebastian Giovinco forced Casillas into a save with a shot from the edge of the area.
Giovinco could have made Madrid pay late on as he surged into the box but was too indecisive and failed to get a shot away with Pepe eventually clearing the danger.
Madrid now lead Group B with nine points and require just a point in the return fixture in Turin in two weeks' time to guarantee their place in the last 16.