Toni Kroos put Germany into an early lead from the penalty spot, but a second-half double from Antoine Griezmann earned France the win that they probably deserved based on their fightback after the break.
France now sit four points clear at the top of Group A1, while Germany are without a win in three games in this competition and can no longer qualify for the final stage.
Both teams started brightly, but Germany quickly began to look a threat in the final third with Leroy Sane posing a constant threat to the home side's backline.
Germany's opener arrived from the same source with Sane bursting into the penalty area before seeing a cross blocked by the arm of Presnel Kimpembe, with the official behind the goal deciding that it was deliberate.
Kroos stepped up to slot the resulting penalty to Hugo Lloris's left, but the France skipper will feel that he could have tipped the ball past the post.
Ginter also sent a free header wide of the post from 12 yards, and France could have made Germany pay just before the break when Lucas Hernandez found Olivier Giroud at the near post only for the forward to send his effort over the crossbar.
The home side remained in the ascendancy and their equaliser arrived just after the hour mark, with Griezmann able to direct a stunning header into the far corner of the net after reacting sharply to Hernandez's driven cross.
Germany responded well to going behind and Serge Gnabry came close to putting his side back in front with a rasping drive from distance, but Lloris was able to parry the ball away from danger.
However, France slowly began to establish control in the game and they were awarded a spot kick with 12 minutes remaining as Mats Hummels was penalised for tripping Blaise Matuidi, although replays indicated that the midfielder had stood on the foot of the Germany centre-back.
Griezmann stepped up to take the effort from 12 yards, with the Atletico Madrid attacker successfully sending Neuer the wrong way for his 26th goal for his country.
Germany needed a win to keep their hopes of progression alive, but the visitors struggled to create any clear-cut chances during the closing stages and the pressure on Joachim Low is now likely to increase with Germany now having lost six of their last 10 matches.
FRANCE (4-2-3-1): Lloris; Pavard, Varane, Kimpembe, Hernandez; Kante (N'Zonzi 94'), Pogba; Mbappe (Dembele 86'), Griezmann (Ndombele 91'), Matuidi; Giroud
GERMANY (3-4-3): Neuer; Ginter (Brandt 83'), Sule, Hummels; Kehrer, Kimmich, Kroos, Schulz; Gnabry (Muller 88'), Werner, Sane (Draxler 75')