Udinese were twice denied by the woodwork, but the 0-0 in Rennes means they’ll qualify as long as they don’t lost the last game to Celtic.
The Friulani were joint top of Group I with Atletico Madrid, but with the Spaniards winning 1-0 in Glasgow, it means Udinese will qualify as long as they emerge unbeaten from the final head-to-head at the Stadio Friuli.
They again rested stars like Antonio Di Natale, Dusan Basta and Giampiero Pinzi. Rennes were bottom of the table with just two points and fielded ex-Inter man Stephan Dalmat in the trequartista role.
Udinese hit the frame of the goal after 13 minutes, as Boye only cleared Doubai’s long ball straight to Antonio Floro Flores, who beat the on-rushing goalkeeper to thump the upright.
The Italians were again denied by the woodwork on 26 minutes. This time a free kick from the right found Mehdi Benatia’s soaring header to clip the top of the crossbar.
Costil was at full stretch to palm away Diego Fabbrini’s left-foot angled drive, while a Floro Flores solo effort was deflected out for a corner and Badu’s screamer bounced just in front of the goalkeeper to skim the upright.
Some desperate defending stopped Floro Flores tapping in at the end of a Fabbrini and Pablo Armero counter-attack. Rennes finally threatened before half-time with Samir Handanovic comfortably smothering a Dalmat snapshot, while Boukari’s pass flashed across the face of goal with nobody ready to tap in.
Hadji nodded a Rennes corner over after the break, then some chaotic defending eventually saw Pajot blast over the bar from a very promising position.
Fabbrini went on the counter, but there was a misunderstanding with Floro Flores and the pass sent into an empty space.
Bad news for Rennes at the 68th minute when Boukari pulled up with a suspected thigh strain, but all three substitutions had already been completed. He returned to the pitch with strapping to his leg, but clearly in no condition to run.
Meanwhile, Floro Flores again wasted a glorious opportunity for Udinese when Costil parried Dusan Basta’s shot into his path, but he blasted wide of the open goal.
Costil also blocked a Badu strike from distance, but Handanovic needed his first truly tricky save to deny Pitroipa’s flick and right-foot effort on 76 minutes.
At the other end, Costil was also called into action when one-on-one with Pinzi, as the substitute’s first touch let him down, then stopped Danilo turning in from a corner.
Rennes 0-0 Udinese
Rennes: Costil; Jebbour, Kana-Biyik, Boye (Mandjeck 46), Mavinga; Tettey, Pajot, Brahimi (Pitroipa 56); Dalmat (Doumbia 61); Boukari, Hadji
Udinese: Handanovic; Benatia, Danilo, Ekstrand; Isla (Basta 61), Doubai (Pinzi 83), Badu, Asamoah, Armero; Fabbrini; Floro Flores
Ref: Karazev (Rus)
Think you know your Italian football? Share your knowledge, tips and comments to win cash prizes in OLBG's World Cup tipster competition  - £10,000 to be won!