The two sides couldn’t be separated across 120 minutes, but Dani Olmo and Alvaro Morata’s failure to convert from the spot sent Roberto Mancini’s side into Sunday’s final with a 4-2 penalty victory.
Juventus’ Federico Chiesa had whipped an unstoppable drive into Unai Simon’s net to put Roberto Mancini’s side ahead on the hour, before substitute Morata forced extra time with a clinical 80th-minute finish.
Despite ultimately bowing out, La Roja started the brighter of the two sides and will feel like they deserved a spot in Sunday’s showpiece, with Torres in the thick of the action from the get-go.
The City winger regularly drifted inside and, on 15 minutes, skipped away from the attentions of Jorginho before dragging an effort wide of Gianluigi Donnarumma’s right-hand post from outside the box.
It was far from one-way traffic though in a captivating first half, and Unai Simon was thankful to his defenders for sparing his blushes after he was beaten to a ball in behind by Chelsea’s Emerson.
The Italian full-back stole in down the left but the Azzurri weren’t able to capitalise before Laporte and co. could get back into position.
Dani Olmo was Spain’s bright spark of the first 30 minutes and was at the centre of the half’s biggest chance, testing Donnarumma low to his right at the second time of asking after his initial effort was blocked by Leonardo Bonucci.
And La Roja were also quicker out of the blocks once again in the second 45, with Giovanni Di Lorenzo having to be at his best to put the ball behind with Torres lurking at the back post from Dani Olmo’s ball across
But the deadlock was broken just before the hour, when Chiesa expertly bent the ball into the far corner of Unai Simon’s net to finish off a devastating counter, which Laporte thought he’d thwarted with a timely challenge on Ciro Immobile in the build-up.
Torres was hauled off soon after, bringing an end to a thrilling duel with Di Lorenzo down the left flank, who had paid close attention to the City man after recognising the danger he’d possessed for Spain across the Euros so far.
With the three-time champions gradually starting to lose their grip on the game, Rodrigo was drafted into the midfield alongside Sergio Busquets to maintain Luis Enrique’s side’s possessional and territorial dominance.
And it almost paid dividends when Mikel Oyarzabal had seemingly got on the end of Koke’s exquisite chipped ball in behind but, with the goal gaping, he failed to make a clean contact and the chance went begging.
Italy’s staunch rearguard had conceded just once at Euro 2020 so far, but they were finally breached when substitute Morata pounced with ten to play of normal time.
The move was instigated by Laporte’s incisive ball forward, which bypassed the Italian midfield to find Spain's number seven in a pocket of space midway inside the attacking half.
Morata drove forward, played a neat one-two with Dani Olmo before wrong footing Donnarumma with a clever near-post finish.
And things could have got even better for La Roja at the death, when Laporte was a whisker away from being the hero, but he couldn’t stretch far enough to convert Busquets’ flicked header from a corner at the back post.
It was the same old story in extra time, with Spain the first to go close in their pursuit of an all important second, with the Italians surviving a spell of penalty box pinball from a left-wing free-kick.
But with the legs tiring, an enthralling encounter was destined for penalties under the Wembley lights.
And despite Manuel Locatelli seeing his opening kick saved by Unai Simon, Dani Olmo and Morata failed to beat Donnarumma, allowing Chelsea's Jorginho to coolly convert the deciding kick and send the Azzurri into raptures.
Roberto Mancini's side will face one of Denmark or England in Sunday's final, who do battle on Wednesday evening at 20:00 (UK).