Two goals from Antoine Griezmann put Euro 2016 hosts France into Sunday's final against Portugal on a dramatic night in Marseille.
France had been under pressure for much of the first half -- but a penalty in the final seconds before the break changed the game.
Germany captain Bastian Schweinsteiger was adjudged to have handled the ball as France crossed from a corner, and Griezmann stepped up to fire the spot-kick past Manuel Neuer.
And with 72 minutes gone, the Atletico Madrid man sealed the victory for France, stabbing the ball home after Neuer had flapped at a Paul Pogba cross.
France had started at a fierce pace in an crackling Stade Velodrome atmosphere, and almost took the lead after six minutes when a low Griezmann effort was tipped away by Neuer.