French flanker Serge Betsen scored the only try of the match, but Wilkinson guided England home with five penalties and a hat-trick of drop goals.
The match deteriorated into a kicking contest after heavy rain and wind made the conditions slippery and France paid dearly for their poor discipline.
Winger Christophe Dominici was sent to the sin bin in the first half for tripping Jason Robinson. In the second, Betsen was shown the yellow card for a late tackle on Wilkinson.
Next week's final is a rematch of the 1991 final, which Australia won 12-6 at Twickenham. France, runners-up in 1987 and again four years ago, face New Zealand in the third place playoff on Thursday. The All Blacks were beaten 22-10 by Australia on Saturday.
With a place in the final at stake, both teams showed signs of nerves and there was little fluency to the game as they struggled to hold on to the ball.
England opened the scoring in the ninth minute when Wilkinson potted his first drop goal with his right boot, but France responded immediately with a try to Betsen.
The blindside flanker won the ball at the back of the line-out and darted through a gap. He was tackled just short of the line, but his momemtum carried him over and New Zealand referee Paddy O'Brien raised his arm to award the try after consulting the video official.
Rugby World Cup 2003 SFs
Australia upset All Blacks, enter final
Win comes at a heavy cost
Writes Wallabies off at your own risk
Frederic Michalak converted from near the touchline, but France failed to add to their tally after the flyhalf missed four penalty shots.
Wilkinson also missed three penalties and a drop goal, but succeeded with eight other shots to swing the game England's way.
He missed his first penalty attempt when Dominici was sent to the sin bin for a trip on Robinson that not only cost him 10 minutes, but forced him to limp off injured.
Wilkinson made amends for his early miss to put the European champions 12-7 in front at half-time with two penalties and two drop goals, both off the right foot.
Veteran England prop Jason Leonard set a world record for Test appearances when he came on for his 112th international.
Leonard, 35, took sole ownership of the world record he had previously shared with former French centre Philippe Sella.
Michalak and Wilkinson both missed long-range penalties shortly after the restart before France paid the penalty for their indiscipline.
Betsen was shown the yellow card for a late tackle on Wilkinson and the English flyhalf punished the French by kicking his third penalty to put his side 15-7 in front.
A third drop goal, this time off his favourite left foot, gave England an 11 point lead with 22 minutes to go. Wilkinson then hammered home their dominance with another two late goals to put them into their second World Cup final.
Teams:
England -- 15 Josh Lewsey; 14 Jason Robinson, 13 Will Greenwood, 12 Mike Catt (21 Mike Tindall, 69th), 11 Ben Cohen; 10 Jonny Wilkinson, 9 Matt Dawson (20 Kyran Bracken, 69th); 8 Lawrence Dallaglio, 7 Neil Back, 6 Richard Hill, 5 Ben Kay, 4 Martin Johnson (c), 3 Phil Vickery, 2 Steve Thompson (16 Dorian West, 79th), 1 Trevor Woodman (17 Jason Leonard, 79th)
France -- 15 Nicolas Brusque; 14 Aurelien Rougerie, 13 Tony Marsh, 12 Yannick Jauzion, 11 Christophe Dominici (22 Clement Poitrenaud, 34th); 10 Frederic Michalak (20 Gerald Merceron, 63rd), 9 Fabien Galthie (c); 8 Imanol Harinordoquy, 7 Olivier Magne, 6 Serge Betsen (19 Christian Labit, 63rd), 5 Jerome Thion, 4 Fabien Pelous, 3 Sylvain Marconnet, 2 Raphael Ibanez, 1 Jean-Jacques Crenca (17 Olivier Milloud, 61st)
Referee: Paddy O'Brien (New Zealand)