Antoine Griezmann, the tournament's top scorer, made the decisive contributions in each half to set up a final against Portugal at the Stade de France on Sunday.
Griezmann scored from the penalty spot right on half-time when Germany's Bastian Schweinsteiger was penalised for handball by Italian referee Nicola Rizzoli in an aerial challenge with Patrice Evra.