The Portuguese champions had their backs to the wall for much of the game following Alex Telles’ 27th-minute dismissal and Juve’s dominance finally paid off as substitutes Marko Pjaca and Dani Alves scored two minutes apart to seal a 2-0 win.
Porto looked to strangle the game after they had been reduced to 10 men, Telles booked for tripping Juan Cuadrado on the halfway line and dismissed for another caution just 74 seconds later for another touchline foul, this time on Stephan Lichsteiner.
Miralem Pjanic stung the palms of Iker Casillas with the game’s first decent effort, with the Spanish goalkeeper then pushing an effort from his former Real Madrid team-mate Gonzalo Higuan behind for a corner.
The visitors came close to taking the lead on the stroke of half-time as Paulo Dybala’s long-range drive rattled the post.
Porto were frustrating the visitors after the interval as they battled resolutely.
With Juventus knocking on the door but unable to take the lead, Max Allegri looked to his bench with impressive results.
Pjaca replaced Cuadrado after 67 minutes and had the Serie A champions ahead less than five minutes later, finishing well for his first Juve goal after Dybala’s pass was deflected perfectly into his path.
Alves needed even less time to double the advantage as he came on for Lichsteiner and struck just over 60 seconds after his introduction, controlling Alex Sandro’s cross before rifling home.
Sami Khedira almost added a third late on but his sliding effort dropped wide of Casillas’ goal, although the damage appears to have already been inflicted.
Allegri’s side have now won 13 of their last 15 games and Porto face an uphill battle to overturn the two-goal deficit at the Juventus Stadium, where the home side are unbeaten since August 2015.
The Portuguese champions will be buoyed by the fact this was only their second defeat of the campaign across all competitions, with Leicester beating them at the King Power Stadium during the group stages.
Casillas, Maxi Pereira, Felipe, Marcano, Alex Telles, Danilo Pereira, Herrera, Ruben Neves (Corona 60), Brahimi (Diogo Jota 73), Andre Silva (Layun 30), Tiquinho Soares.
Jose Sa, Boly, Andre Andre, Torres.
Buffon, Lichtsteiner (Dani Alves 73), Barzagli, Chiellini, Alex Sandro, Khedira, Pjanic, Cuadrado (Pjaca 67), Dybala (Marchisio 86), Mandzukic, Higuain.
Neto, Benatia, Asamoah, Rugani.
Felix Brych (Munich).