(Aggregate 4-4; Palace win 5-4 on penalties)
Ten-man Crystal Palace went through to the play-off final after a sudden death shoot-out victory over Sunderland.
Michael Hughes scored the winner after Jeff Whitley had missed from the spot.
Sunderland had earlier levelled the tie when Jason McAteer crossed and Kevin Kyle fired home, before Marcus Stewart headed the home side in front.
Palace's challenge looked over when Julian Gray was sent off for a second booking, but substitute Darren Powell headed a dramatic injury-time leveller.
Needing to overturn a one-goal first-leg advantage Sunderland were expected to come out firing.
But Palace settled the quickest and they could have scored twice in the opening six minutes.
First a Michael Hughes mis-hit shot fell invitingly at the feet of Gray five yards out and Sunderland keeper Mart Poom came to their rescue by spreading himself well to block the shot.
Sunderland had to endure an even closer scare when a Danny Granville cross found the head of Riihilahti and his effort beat Poom and came back off the post, only for Gray to lash the rebound over.
6 mins: Riihilahti heads against the post to give Sunderland a scare
42 mins: Kyle heads Sunderland's first goal
45 mins: Stewart makes it 4-3 on aggregate to Sunderland
86 mins: Gray sent-off for second booking
90 mins: Powell heads a dramatic equaliser for Palace
Sunderland finally threatened as Kyle flicked on for Stewart but his shot on the turn failed to test Palace keeper Nico Vaesen.
It was a brief moment of joy for the Sunderland front-line and Palace soon grabbed back the initiative and Andy Johnson and Danny Butterfield both went close with long-range efforts.
Sunderland looked devoid of ideas, with Palace's defence easily soaking up their predictable attacks.
But three minutes before half-time Sunderland produced a goal from nothing.
McAteer put in a hopeful cross and Kyle took it brilliantly on his chest before lashing it low past Vaesen.
Palace looked shell-shocked, and it got even worse as Sunderland poured forward and grabbed a second two minutes into first-half injury-time.
McAteer was again the provider as he whipped in a cross from the right and Stewart planted a firm header past Vaesen at his near post.
0-0 Oster (hit post)
0-1 Johnson (scored)
1-1 Smith (scored)
1-2 Freedman (scored)
2-2 Babb (scored)
2-3 Shipperley (scored)
3-3 Robinson (scored)
3-4 Popovic (scored)
4-4 Breen (scored)
4-4 Derry (saved)
4-4 McAteer (saved)
4-4 Routledge (saved)
4-4 Whitley (saved)
4-5 Hughes (scored)
Gray blazed over the bar from a good position and Neil Shipperley headed just wide as Palace looked to level the tie.
The unpredictable Gray went close after beating Kyle and then firing a shot in from the edge of the box that was just the wrong side of the upright.
Palace threw everything forward but their hopes appeared to be dashed when Gray was dismissed for a second yellow card for a rash challenge on McAteer.
But in injury time Poom misjudged a corner and Darren Powell crashed a header in off the bar.
Carl Robinson shot over and Kyle headed straight at Vaesen as Sunderland looked to press home their man advantage in extra-time without success.
John Oster and Jason McAteer both missed penalties for Sunderland but Palace twice blew the chance to win it when Poom saved from Shaun Derry and Wayne Routledge.
But Whitley's attempt to outsmart Vaesen backfired as the keeper saved and Hughes stroked home the winner.
Sunderland: Poom, McCartney, Breen, Babb,
Bjorklund (Williams 105), Oster, Whitley, McAteer,
Thornton (Robinson 69), Kyle, Stewart (Tommy Smith 84).
Subs not used: Clark, Myhre.
Booked: Oster, Kyle, Robinson, McAteer.
Crystal Palace: Vaesen, Granville (Powell 72), Leigertwood,
Popovic, Butterfield (Freedman 61), Gray, Hughes,
Riihilahti (Derry 58), Routledge, Shipperley, Johnson.
Subs not used: Berthelin, Black.
Sent Off: Gray (86).
Booked: Gray, Derry, Popovic, Hughes, Shipperley.
Referee: D Pugh (Merseyside).