The Portuguese had fired the hosts into a fourth-minute lead with a tidy finish, but Juventus were level midway through the opening period when Fernando Llorente bundled home from close range.
Ronaldo took his tally to an incredible seven goals in just three Champions League games this season with a penalty five minutes later and Juve’s task became even tougher when Giorgio Chiellini was sent-off just after the interval.
Gareth Bale was then introduced to make his home European debut for Real, but despite failing to make the most of their numerical advantage they held on to make it three wins from three in Group B.
Defeat, however, leaves the Italian champions in a perilous situation with just two points from three games, now two behind Galatasaray after they beat FC Copenhagen 3-1 in the other game in the group on Wednesday.
“After the sending-off they backed off and it was more difficult for us to create opportunities,” Madrid captain Iker Casillas told Canal Plus.
“But we have taken an important step towards qualifying with nine points in three games.”
The return of Casillas in goal was one of four changes that Real boss Carlo Ancelotti made to his side from the 2-0 win over Malaga at the weekend, but the Spanish captain showed no signs of rustiness as he parried away a fine drive by Claudio Marchisio inside the first two minutes.
Juventus responded brilliantly to going behind, though, as they swarmed forward and Carlos Tevez saw two efforts from distance fly just off target.
And they were deservedly level on 22 minutes when Casillas parried Paul Pogba’s header at the end of a flowing move and Llorente swept home the rebound for just his second Juve goal since joining from Athletic Bilbao.
It took Madrid just seven minutes to edge back in front as referee Manuel Graefe rightly awarded a penalty when Chiellini hauled down Sergio Ramos as the defender tried to get on the end of Di Maria’s free-kick.
Both sides could have added to their tally before the break as the game rushed from end to end with Andrea Pirlo and Ronaldo firing just off target.
However, the game swung even further in Madrid’s favour just three minutes into the second half when Chiellini was harshly shown a straight red card for bringing down Ronaldo just outside the area.
Karim Benzema should then have sealed the three points when he somehow conspired to fire wide of an open goal from two yards out after great work from Di Maria and Alvaro Arbeloa.
Bale was introduced for the much maligned Benzema with just under 25 minutes remaining, but the Welshman struggled to make any impact on the game and certainly didn’t enhance his chances of starting when Real travel to face Barcelona in La Liga on Saturday.