Scott Deasy kicked two first-half penalties, missed another badly, and was unfortunate to see another attempt come back off an upright.
On top of that, Ireland full back Danny Riordan went through the French defence in the 22nd minute but lost the ball as he went to touch down.
France led at half-time 9-6 with a couple of penalties from out-half Stephane Guinin and another from skipper and scrum-half Paul Dubert.
France had to survive another early second half attack that once again featured flying winger Mark Roche.
Eventually Ireland scored the opening try, it was Conor Smyth who got the crucial points. Deasy converted for an Ireland lead of 13-9.
French substitute Yann Denis kicked a 73rd minute penalty but Ireland finished strongly and secured the win, Deasy kicking an important late penalty.
Try: Connor Smyth; Con: Scott Deasy; Pens: Scott Deasy 3
D Riordan (Old Belvedere); J McInerney (Garryowen), S Murphy (UCD), M D’Arcy (Clontarf) (cpt), M Roche (Lansdowne); S Deasy (Lansdowne), A Lloyd (TCD); I Prendiville (Lansdowne), E Rossiter (Belvedere), D Lavery (Belvedere), C Ruddock (St Mary’s), D Whann (Ballymena), C Butterworth (Lansdowne), P Pritchard (Ballynahinch), T Ryan (Clontarf).
M Abbott (Con), G Sweeney (Con), I Soroka (Clontarf), C Smyth (Ballymena), A D’Arcy (Clontarf), N Cronin (Garryowen), J McDermott (TCD), R McBurney (Ballymena).