The South Africans won the toss and elected to bat after winning the toss but were left ruing the decision after in-form seamer Trent Boult accounted for Hashim Amla (10) and Quinton de Kock (14) inside eight overs.
Faf du Plessis and Rilee Rossouw (39) shared 83 runs for the third wicket before the latter edged Corey Anderson to backward point where Martin Guptill made a spectacular one-handed catch to dismiss him for 39.
Kane Williamson put down a difficult chance from AB De Villiers on 38 and was punished as the captain hit the next three balls for a combined 14 runs to bring up his 50 off 32 balls.
De Villiers’ and Du Plessis’ century partnership was then brought up off 71 deliveries before rain forced the players off after 38 overs.
The teams returned after a two-hour interruption and Anderson had Du Plessis caught behind for 82 with just the second ball back.
David Miller hit six fours and three sixes as he raced to 49 from 18 deliveries before also edging Anderson (three for 72) behind in the last over.
New Zealand made their customary speedy start with skipper Brendon McCullum clubbing Dale Steyn for a six in the first over before dispatching Vernon Philander for a six and two fours in the second.
The skipper brought New Zealand’s fifty at the start of the fifth over with a ferociously-driven six that cleared the long off boundary with ease, before hooking the paceman for another maximum three balls later to bring up his half-century.
De Villiers’ decision to bring Morne Morkel into the attack paid dividends when McCullum mistimed to mid-on and Williamson dragged on to his stumps to give the paceman two wickets in as many overs to restrict New Zealand to 81 for two.
Guptill and Ross Taylor set about picking up where McCullum left off but the boundaries dried up and Guptill was run out for 34 attempting a single that was simply not there. Taylor departed shortly after for 30 when JP Duminy tricked him into edging behind to leave New Zealand stuttering on 149 for four.
New Zealand’s hopes of victory now rested firmly on the shoulders of Grant Elliott and Anderson and the pair kept the Black Caps in the match with half centuries in a fifth-wicket partnership of 103 runs in 16.2 overs.
Morkel (three for 59) was South Africa’s hero when he removed Anderson, who top-edged to square leg, and New Zealand suffered a further blow when middle-order dangerman Luke Ronchi (eight) flicked tamely to mid-wicket. At that point the Black Caps, on 269 for five, needed 29 runs from the final three overs and some subsequent boundary-saving fielding from South Africa meant 23 were required from the last two.
The Eden Park fans held their breath when Elliott skied Morkel’s final delivery but a collision between Duminy and Farhaan Behardien ensured the ball dropped safe and he and Daniel Vettori ran two.
That meant 12 runs were required off the final over from Steyn and, after Vettori hit the third ball to the ropes, Elliott launched the penultimate delivery for six to send New Zealand into their first ever World Cup final and cue wild celebrations across the country.