Jim Magilton, continuing in charge of the side after taking over from Stephen Robinson for the first time in November's double header against the Azzurri and Cyprus, saw his side contain their higher-ranked opponents until Daniele Rugani's 59th minute header.
Marcelo Trotta, on loan at Brentford from Fulham, sealed it in the final minute.
While encouragement can surely be taken from the close nature of the result, the side's continued struggles in front of goal - they have now scored just twice in seven matches - cannot be ignored.
On a poor surface both sides were guilty of giving away early free-kicks, though neither team made significant headway as a result.
Sheffield Wednesday forward Caolan Lavery was the home side's most willing outlet in attack, and he was involved in the 26th minute when Carl Winchester forced a save from Francesco Bardi in the Italian goal.
Goalkeeper Connor Brennan earned the first booking of the match after half an hour but Northern Ireland were holding tight, reducing Federico Bernadeschi to a blocked shot moments later.
Ryan Brobbell missed the target eight minutes before the break, while Federico Viviani and Danilo Cataldi both missed for the visitors before the whistle.
Italy upped the pressure after the restart, forcing a series of corners, and opened the scoring just before the hour-mark.
Viviani's curling free-kick from the left fell perfectly for Rugani and he headed into the corner from six yards.
Northern Ireland were close to responding in kind just three minutes later but QPR's Jamie Sendles-White steered Luke Conlan's delivery wide from a great position.
It looked set to finish a one-goal game until Trotta got on the end of Jacopo Dezi's pass and sealed the win.