Lazio went ahead near the hour mark when Emre Can scored an own-goal.
But Joao Cancelo scored on Juventus’ first chance less than 15 minutes later, turning in a rebound of a shot from Paulo Dybala following strong work from Federico Bernardeschi to provide a cross from the left flank.
Then Senad Lulic was whistled for a foul on Cancelo directly in front of the goal to set up Ronaldo’s penalty.
Still, it was a difficult night for Juventus as defender Leonardo Bonucci hobbled off with an apparent injury in the first half.
Juventus didn’t produce a single shot in the first half and defender Daniele Rugani had to clear a dangerous effort from Ciro Immobile off the line.
“For 50-60 minutes it was the worst Juventus of the season,” Juventus defender Giorgio Chiellini said. “We always struggle against Lazio but we’re leaving with a good result.”