Fabio Quagliarella diverted Andrea Pirlo’s weak shot past the wrong-footed Petr Cech to give the home side the lead just before the interval.
Arturo Vidal added to the lead just after the hour mark when his side-footed effort from Kwadwo Asamoah’s cut-back was deflected past Cech off the heel of Ramires.
And substitute Sebastian Giovinco put the gloss on the display as he slotted the ball past the advancing Chelsea goalkeeper in injury time.
Chelsea must now beat Nordsjaelland in their final Group E game – and hope Shakhtar Donetsk beat Juve in Ukraine – to have any chance of retaining their European crown.
And Roberto Di Matteo may regret fielding a new-look line-up with Fernando Torres axed in favour of Eden Hazard up front and Cesar Azpilicueta playing on the right of midfield.
Juventus had dominated the game before the break with wing-backs Stephan Lichtsteiner and Asamoah pushing forward at every opportunity.
Lichtsteiner should have opened the scoring inside five minutes but Cech managed to push his close-range effort onto the post. At the other end, Hazard nearly found the breakthrough only for Gianluigi Buffon to deflect his shot just wide.
But the home side were producing the classier football and it was no surprise when they took the lead through Quagliarella. In fact, they nearly doubled their advantage soon after.
Minutes after the opener, Ashley Cole had to clear off the line to avoid the Blues going two behind.
But Di Matteo’s side remained an intermittent goal threat and broke within seconds only for Juan Mata to see Buffon block his volleyed effort at point-blank range.
The Chelsea boss did introduce Torres with 20 minutes remaining but the visitors were two down by that point following Vidal’s effort, and Giovinco’s late finish puts the Blues on the verge of a Champions League exit.