The quarter-final was evenly poised at 1-1 at the end of 90 minutes, after Michael Owen's third minute opener was cancelled out by a late Helder Postiga strike.
Normal time finished on a controversial note when Sol Campbell had a goal disallowed, before Rui Costa and Frank Lampard exchanged goals in the second period of extra-time.
Captain David Beckham got the shootout off to a bad start by blasting high and wide, but Rui Costa then missed Portugal's third kick and it went into sudden death, where goalkeeper Ricardo was the hero.
First he saved from Darius Vassell and then he stepped up to blast his own penalty home to make it 6-5 to Portugal and clinch their place in the semi-finals.
Sven-Goran Eriksson chose an unchanged line-up following the victories over Switzerland and Croatia, while Luiz Felipe Scolari made just one change replacing the suspended Pauleta with Nuno Gomes.
England made the perfect start when, in just the third minute, Costinha failed to deal with a long clearance from David James. Owen latched onto the bouncing ball and shot on the turn, lifting it over Ricardo to make it 1-0.
The hosts looked to hit back immediately and Luis Figo fired over a low cross from the left that bounced through to Cristiano Ronaldo eight yards out. The youngster set himself before firing goalwards, only to see Campbell and Ashley Cole combine to make a crucial block.
Portugal began to take a grip in midfield and Campbell was forced to deflect a Figo cross away for a corner, before Nuno Maniche fired over the crossbar.
Eriksson's men may have conceded control to their opponents but they continued to create the better chances, and Owen could have made it two when he ran on to a lofted throughball from Paul Scholes and chipped the goalkeeper, only to see the shot drift inches over and land on the roof of the net.
England then received a major blow when Wayne Rooney limped out of the action to be replaced by Vassell, who almost created a second for Owen within minutes of coming on, but the Liverpool striker was denied by a spectacular save from Ricardo.
Scolari's side finished the half in complete control as they forced the England defence back, but they could not create the clear chances their dominance deserved.
The second half was one-way traffic from the off as the hosts monopolised possession and forced England to defend on the edge of their area.
Still chances were few and far between, and James had little to do but see long-range efforts fly behind.
Fifteen minutes ahead of the final whistle James dived full length to make a great save to deny Figo. It was the Portuguese captain's last major contribution before being replaced by Postiga.
It proved to be a crucial substitution, as with seven minutes left to play Beckham gave Simao too much room to cross. His centre found the unmarked Postiga four yards out and the Spurs man made no mistake in heading beyond James to equalise.
There was still time for some drama before the end of 90 minutes as Campbell headed against the crossbar before heading the rebound home, only for the Swiss referee to harshly rule the goal out - apparently for a push by John Terry.
The first half of extra-time saw Portugal continuing to force the pace, only for the outstanding Campbell to end a series of attacks with some fine defending.
The second period saw the game spring back into life as the hosts went 2-1 ahead in the 110th minute thanks to a brilliant individual goal from Rui Costa. The AC Milan star surged forward from midfield and powered through the tackle of Phil Neville before smashing the ball home from 18 yards out.
England looked to be on their way home until Gary Neville won a corner five minutes from the end. Beckham curled over the flag-kick, Terry nodded it down and Frank Lampard swiveled and shot in one movement to make it 2-2 and send it to penalties.
Then came the heartache for Beckham and Vassell.
Portugal march on after earning a deserved victory, but England will wonder why Campbell's header was chalked off.