World champions France, who lost the Euro 2016 final as hosts to Portugal, were guaranteed a ticket to next year’s tournament before kick-off in Paris following a 0-0 draw between Turkey and Iceland.
However their hopes of turning the final home qualifier into an evening of celebration at a chilly Stade de France were compromised when Vadim Rata punished abject defending to give Moldova a shock ninth-minute lead.
Raphael Varane levelled for France 10 minutes before half-time, triggering furious protests from Moldovan players and their coach who argued goalkeeper Alexei Koselev was fouled by Giroud.
The Chelsea forward grabbed the winner from the spot 11 minutes from time after Lucas Digne was cut down in the box to leave France two points clear of Turkey at the top of Group H.
“I could and should have scored before the penalty. We quite simply didn’t get off to the start we should have done,” Giroud told French television.
Giroud was handed a start by France coach Didier Deschamps despite playing just 20 minutes at club level since last month’s international break.
“Whether he’s indispensable or not, he’s very useful and efficient,” said Deschamps. “Despite what he doesn’t have at Chelsea, he still has it with us.”
France round out their qualification campaign away to Albania on Sunday in what will be Deschamps’ 100th match in charge while Turkey travel to Andorra.
Deschamps recalled Kylian Mbappe and N’Golo Kante from injury here while Steve Mandanda retained his place in goal with Hugo Lloris ruled out until next year after elbow surgery.
– Lenglet blunder –
Turkish coach Engin Firat, who replaced Semen Altman as Moldova boss two weeks ago, could not have dreamed of a better start to his reign when Clement Lenglet twice failed to head clear and Rata muscled his way past the Barcelona defender to poke beyond Mandanda.
It was just the third goal Moldova, who lost 4-1 to France in their opening qualifier last March, had scored in nine group matches.
France created a series of chances in reply with Benjamin Pavard volleying low past the far post before Giroud stabbed wide from close range.
Mbappe then sliced over from a tight angle and drew a sharp stop from Koselev with a 20-yard drive while a diving Giroud again headed wide.
Varane hauled the hosts level with a fiercely disputed equaliser as Koselev spilled a free-kick under pressure from Giroud, allowing the France captain to nod home and sparking an angry reaction from the visitors — with Firat booked for his touchline protestation.
Mbappe, who sat out the October fixtures with Iceland and Turkey due to a thigh complaint, was denied by a courageous block from Ion Jardan near the hour mark but Moldova’s brave resistance was ended on 79 minutes.
Veaceslav Posmac chopped down Everton left-back Digne inside the area and Giroud confidently stepped up to side-foot home the spot-kick for his 39th international goal, leaving him two adrift of France great Michel Platini.