This is the fourth World Cup in a row that Germany have reached the last four of the tournament, and France had little answer to Mats Hummels' 13th-minute header.
Germany always looked comfortable with the slender lead and it was Joachim Low's side who came closest to scoring again before settling for a 1-0 result.
This was a blow to French pride, the country remembering with bitterness semi defeats by Germany in 1982 -- which featured the infamous Harald Schumacher challenge on Patrick Battiston -- and 1986.
For some reason, Didier Deschamps' side seemed strangely subdued in defeat. Even towards the final whistle there seemed little urgency.
This was far from the classic that had been hoped for -- indeed it was one of the more turgid affairs of this consistently excellent tournament.
The team selections saw a trio of Arsenal players dropped to the bench: Per Mertesacker for Germany, who had been struggling with an illness, and Olivier Giroud and Laurent Koscielny for France.
The significant move for Germany was captain Philipp Lahm returning to right-back rather than midfield, and it looked as though Low had his selection right with Mamadou Sakho, the Liverpool defender whose return from injury accounted for Koscielny missing out, looking hesitant.
But France began to make things uncomfortable for the German defence too, especially with the darting runs of Mathieu Valbuena. It was he who found Karim Benzema unmarked with plenty of time and space, but he sidefooted wide when he should have scored.
Germany intensified the pain of the miss in the 13th minute when Kroos' free kick was met by Hummels, outjumping Raphael Varane and steering a header over Hugo Lloris.
Mesut Ozil, the one Arsenal player who did start, produced a brilliant volleyed cross to Miroslav Klose, who went sprawling in the box. Replays showed Mathieu Debuchy did have hold of Klose's shirt but an over-dramatic fall by the striker did not impress Argentinian referee Nestor Pitana.
Germany failed to build on their lead however and it was France who finished the half on the up. Manuel Neuer produced an outstanding one-handed save from Valbuena, with Benzema unable to put home the rebound from close range as Hummels was in the way. Benzema was denied again after cutting inside but shooting straight at Neuer.
Germany appeared content to play on the break and contain a more adventurous-looking France, a risky approach but it almost paid off when Kroos and Ozil combined but the Arsenal man's return ball was just cut out, then Kroos shot badly wide from 25 yards after more neat approach play.
But much of Germany's midfield play was untidy, and following one such episode Debuchy's cross was met by Varane with a decent header but Neuer held it comfortably enough.
Deschamps' answer was to send on Loic Remy for Yohan Cabaye, a striker for a midfielder, but it was Germany who started to look more dangerous.
Muller skimmed a shot just past the post, Andre Schurrle came off the bench to send a low drive straight at Lloris, then Ozil and Muller combined before France smuggled the ball away.
A glimpse of goal for Benzema was shut down by Sami Khedira, then Blaise Matuidi had an attempt from a narrow angle easily punched clear by Neuer.
A quick break by Germany ended in a couple of terrible misses. Ozil put one on a plate for Muller but he completely missed his kickm before Schurrle shot weakly straight at Lloris.
The last throw of the dice was for Deschamps to throw on Giroud for Valbuena -- a strange choice given that the diminutive Marseille midfielder nicknamed 'petit velo' had been France's player of the tournament.
Schurrle had another good opportunity blocked before Benzema's last-minute strike was turned away one-handed by the unflappable Neuer.