Colombian international Cuadrado turned in Alex Sandro’s cross after 15 minutes with Italian Bernardeschi getting the second in the final minute as last year’s finalists advanced to the last 16 for the fourth straight year.
Massimiliano Allegri’s side needed to win to assure their berth even though a draw or even defeat would have been sufficient for the six-time defending Serie A champions depending on the other Group D result.
But Barcelona eased past Sporting Lisbon 2-0 to comfortably finish top on 14 points, with Juventus second on 11 followed by Sporting on seven and Olympiakos at the bottom with just one point.
“It was like a final, we needed the win so we wouldn’t have to wait for the result in Barcelona,” said Allegri. “But we need to improve and be more clinical finishing off.
“We got a lot wrong in the second half, so I was angry. Szczesny had a great save and we could’ve been 1-1 at the break,” the Juventus coach told Mediaset Premium.
Juve captain and goalkeeper Gianluigi Buffon was out injured with Polish deputy Wojciech Szczesny proving a worthy replacement, producing some key saves as he made his Champions League debut for the Turin side.
Andrea Barzagli wore the captain’s armband with Argentine ace Gonzalo Higuain, who scored the winner in Friday’s 1-0 victory at Napoli, again playing after undergoing hand surgery last week.
Allegri started without several key players in addition to Buffon with Giorgio Chiellini and Benedikt Howedes injured, and Miralem Pjanic and Mario Mandzukic not fully fit.
Argentina striker Paulo Dybala had the first chance after seven minutes with a low shot into the corner that was stopped by Olympiakos keeper Silvio Proto.
But minutes later the Italian champions were ahead when a Blaise Matuidi long ball found Sandro who crossed over for Cuadrado to finish off in front of goal.
The Colombian almost added a second ten minutes later but Proto held while a Higuain effort was deflected wide.
Szczesny showed good reflexes to keep Juventus in the lead just before the break, sticking out his foot to keep out Uros Djurdjevic’s header.
And Szczesny again proved solid in the second half when Germany’s Marko Marin found himself alone in front of goal.
– Dybala struggles –
Fearing a late equaliser Allegri substituted 24-year-old Dybala — the scorer of 12 Serie A goals this season — with the not fully fit Pjanic coming on for the final half an hour.
“Some things aren’t going right for him (Dybala) now, he had the same thing happen at this time last year,” said Allegri after Dybala repeatedly failed to hold onto the ball.
“He’s going through a tricky time, he has to grow up, he has to realise that when things do not happen you have to relax, do the simple things to train hard and find the right level of fitness.”
Allegri added: “When you realise the game is there to be finished off, you have to kill it off. A game can change at any moment on a set play, so we can’t leave it open.”
Cuadrado was denied again on 78 minutes when he rose to pick up Sandro’s deep cross, with Bernardeschi replacing the Colombian late on and securing victory after Proto repelled his initial effort.
Download our app and read this and other great stories on the move. Available for Android and iOS.