The 35-year-old has now scored 12 goals in his last eight games in all competitions after the Portuguese ultimately got the better of old rival Zlatan Ibrahimovic despite being largely anonymous for much of the match.
Milan paid for Theo Hernandez's 71st-minute red card as they failed to close out a game they had dominated for long periods and led through Ante Rebic.
Juve will now be favourites to finish the job in the second leg at the Allianz Stadium next month, with a final against either Inter Milan or Napoli up for grabs.
The hosts started strongly, with Ibrahimovic heading over the crossbar inside the first minute.
He continued to be a threat to his former club early on, but could only direct an ambitious backheel flick beyond the far post, before picking up a booking which will see him miss the second leg through suspension.
Juventus finally produced their first shot in anger nine minutes before half-time, as Juan Cuadrado saw his low strike well saved by Milan goalkeeper Gianluigi Donnarumma.
Milan started the second half as they did the first, on the front foot, but Rebic was denied an opening goal by Gianluigi Buffon.
Samu Castillejo also called Buffon into action seven minutes after the break, with the 42-year-old goalkeeper able to make a comfortable save.
Stefano Pioli's side finally made the breakthrough in the 61st minute, though, as Castillejo's clipped cross was volleyed home at the back post by Rebic.
Juventus were gifted a way back into the game with 18 minutes remaining as Hernandez was handed a second yellow card for a late challenge on Paulo Dybala.
That prompted the 13-time winners to belatedly pile some pressure on the home goal, and Donnarumma had to be alert to keep out Matthijs de Ligt's header.
Dybala curled wide with five minutes remaining, but Juve were awarded a spot-kick in the final minute of normal time as VAR spotted a handball by Davide Calabria.
Ronaldo stepped up and slammed the ball down the middle to score his 24th goal of the season.
Six minutes of injury-time gave the visitors hope of clinching an unlikely victory, but Milan at least held on for a draw to keep their bid for a first Cup crown since 2003 alive.
On Wednesday, Napoli struck first blood in their semi-final as Gennaro Gattuso's men downed Serie A leaders Inter Milan 1-0 at the San Siro, with Fabian Ruiz scoring the winner.
The last-four second legs will take place on March 4 and 5, with the final on May 13 at the Stadio Olimpico in Rome.
COMMENTS
Comments are moderated and generally will be posted if they are on-topic and not abusive.
For more information, please see our Comments FAQ