Didier Deschamps’ side were in grave danger of missing out on making the trip to Brazil next summer after losing the first leg in Kiev 2-0 last week.
But the deficit was erased inside the opening half, albeit after a debatable Karim Benzema equaliser.
There was nothing wrong with Mamadou Sakho’s opener but when Benzema struck with 33 minutes played he did so from what appeared a clear offside position.
France memorably progressed to the finals in South Africa four years ago after a Thierry Henry handball against the Republic of Ireland and were thankful for another slice of luck before Ukraine’s night got worse after the break.
Yevhen Khacheridi was sent off for a second caution within minutes of the re-start, and while the visitors battled on gamely, Oleg Gusev’s own goal on 74 minutes completed Les Bleus’ comeback.
The Real Madrid forward fired Portugal ahead on 50 minutes, to give them a 2-0 lead in the tie.
But Ibrahimovic then threatened to take over as he headed Sweden level on the night before thumping them ahead with a free-kick that was too hot for Rui Patricio to handle.
Sweden suddenly needed just one more goal in the final 15 minutes to progress, but Ronaldo ended their hopes almost as quickly as Ibrahimovic revived them.
With 77 minutes gone he was left in too much space and crashed his shot beyond Andreas Isaksson. Two minutes later the tie was over as he rounded the goalkeeper before shooting high into the net.
Mario Mandzukic sent Croatia ahead on 27 minutes, ghosting in at the back post after Ivan Persic mis-hit an Ivan Rakitic cross, only to then get sent off just before the break.
The Bayern Munich striker left his leg in a dangerous position as he battled for the ball and when contact was made with Johann Gudmundsson he saw red.
It didn’t matter as skipper Darijo Srna’s shot two minutes after the break caught out Hannes Halldorsson and from there Iceland had no answer.
Holding a 3-1 advantage from the opening leg, Fernando Santos’ men arrived in Bucharest looking to wrap up the tie and they all but achieved that with a first-half strike from Konstantinos Mitroglou.
A bizarre own goal from Vasileios Torosidis early in the second half pulled Romania level on the night, but there was to be no dramatic comeback.