Clear chances were at a premium for long spells of the UEFA Nations League contest between the two sides, but France did need debutant goalkeeper Alphonse Areola to repel some late pressure from Germany.
The opening match of the Nations League top flight pitched the past two World Cup winners against each other, although Germany were going into the match having crashed out in the group stages in Russia whereas it was France's first outing since lifting the trophy.
Didier Deschamps made just one change to the team that started the Moscow final against Croatia, with Areola coming in for his debut at the expense of injured captain Hugo Lloris, but it was a pragmatic display from the visitors in the first half.
Germany saw the lion's share of possession during the opening 45 minutes, but clear sights of goal were at a premium and it wasn't until the 18th minute that either goalkeeper was tested when Timo Werner's low curler was comfortably collected by Areola.
The debutant had little else to do in the first half, though, with Germany's only other hint of a chance seeing both Antonio Rudiger and Mats Hummels fail to get the desired contact on headers from a corner.
France responded immediately to that with their first real opening of the contest when N'Golo Kante found Chelsea teammate Olivier Giroud inside the box, but the striker - who failed to register a single shot on target at the World Cup - saw his powerful downward header pushed away by Manuel Neuer.
Neuer made a more routine stop to deny a Kylian Mbappe free kick as France ended the half on top, and there was one last chance for Giroud before the interval too when he steered Mbappe's low cross wide with an inventive flick.
The visitors maintained their improved tempo in the opening stages of the second half, and their best chance came just four minutes after the restart when Antoine Griezmann skipped away from Toni Kroos only to put his drilled effort straight at Neuer.
The match soon fell back into the first-half rhythm, though, and it wasn't until after the hour mark that either goalkeeper was truly tested again, with Griezmann stinging the palms of Neuer from range.
Germany responded immediately this time and Areola had to be alert to claw away Marco Reus's effort after the Borussia Dortmund midfielder had met the ball with a fine first-time effort from the edge of the box.
Areola proved to be France's most important player in the closing stages as Germany stepped up the pressure, first denying Hummels after the defender had led a counter-attack and saw the ball drop back to him in the area having initially tried to tee up Thomas Muller.
Ilkay Gundogan then fired over the crossbar from the edge of the box before Muller's cross almost looped over the head of Areola, who recovered to tip it behind for a corner.
The debutant's standout save came from the resulting delivery when he produced a stunning reaction stop to keep out Matthias Ginter, who must have felt as though he had done enough to open his account for Germany with a firm header from a corner.
Ultimately neither side could break the deadlock, though, as the Germany were held to a stalemate by the team that took their world title off them this summer, getting the top flight of the UEFA Nations League off to a low-key start.
France will next host Netherlands - the other team in Group One of League A - on Sunday, while Germany take on Peru in a friendly that day too.
GERMANY (4-2-3-1): Neuer; Ginter, Boateng, Hummels, Rudiger; Kimmich, Kroos; Muller, Goretzka (Gundogan 66'), Werner; Reus (Sane 83')
FRANCE (4-3-3): Areola; Pavard, Varane, Umtiti, Hernandez; Pogba, Kante, Matuidi (Tolisso 86'); Mbappe, Griezmann (Fekir 80'), Giroud (Dembele 66')