The Portuguese, despite the absence of Cristiano Ronaldo, progressed with one match to play, and are sure to finish top of Group A3, with Italy's hopes in the tournament over.
The result means that Poland have been relegated to League B.
Roberto Mancini's Italians needed a win to keep their hopes of advancing to the final four next June alive, but despite pushing Portugal for over an hour in front of 73,000 spectators at the San Siro, could not find a way through.
Instead, they earned a goalless draw which echoed the stalemate against Sweden a year ago that ended their hopes of reaching the World Cup in Russia.
Despite early pressure from Italy with Lorenzo Insigne and Ciro Immobile both going close, Portugal threatened after the break with William Carvalho denied by Gianluigi Donnarumma and substitute Joao Mario shooting over.
Portugal host Poland in their final Nations League game on Tuesday, with Italy playing a friendly against the United States in Genk.