France have passed their first real test and now a final test awaits.
Les Bleus pounced on two errors by Germany to seal their berth in the title decider against Portugal on Sunday.
Germany dominated the opening half but a handball by Bastian Schweinsteiger at the stroke of half-time gave the hosts an opportunity to take the lead.
Antoine Griezmann made no mistake from 12 yards, but there was still another error left in the world champions.
In the 72nd minute, Germany right-back Joshua Kimmich lost possession in his own box. Paul Pobga, forced wide, delivered a cross from the left flank. Manuel Neuer opted to come out but did not catch or punch the ball away to safety. The ball fell to Griezmann and he poked the ball home.
Germany, who had never lost to France in a competitive match in four previous meetings, could not come up with an answer on Thursday.
With the exception of a stoppage-time save from Kimmich's header, Hugo Lloris was barely called into action in the second half.
France manager Didier Deschamps can take some credit for the victory. His decision to stick to the same XI that thrashed Iceland 5-2 in the quarter-finals paid dividends.
Centre-back Adil Rami and midfielder N'Golo Kante, starters in France's opener against Romania, remained on the bench despite returning from their one-match suspensions.
Samuel Umtiti, France's seventh-choice centre-back not too long ago, made his second appearance for Les Bleus and contributed to a clean sheet. Moussa Sissoko, Kante's replacement against Iceland, put in another tireless display and excelled as an auxiliary right-back in the second half.
And crucially, Deschamps shaped the team around the in-form Griezmann, who delivered a brace at the Stade Velodrome in Marseille.
Les Bleus won the last two tournaments they hosted - the 1984 European Championship and the 1998 World Cup. The 2016 continental crown is theirs to lose now.
- In the 7th minute, Griezmann received a pass from Blaise Matuidi at the edge of the box. He cut inside, going past two defenders before shooting from 14 yards. His low shot lacked power but could only be pushed away by Neuer.
- In the 13th minute, Emre Can, on the right flank, delivered a low cross into the box for Thomas Muller. The forward slid in for a shot but it was wide.
- A minute later, Toni Kroos' pass found Can. The midfielder unleashed a strike towards the bottom-left corner but Lloris produced a one-handed save.
- In the 39th minute, Matuidi gave the ball away to Muller. Muller drove forward but, with no support around him, was forced to shoot from range. Lloris was equal to it.
- In the 43rd minute, Olivier Giroud won an aerial duel with Jerome Boateng on the halfway line. The striker ran into the penalty box and was about to shoot when Benedikt Howedes executed a perfect sliding tackle.
- In first-half stoppage time, France were awarded a penalty after Schweinsteiger was adjudged to have committed a handball in his box. Griezmann stepped up and sent the ball into the top-left corner.
- In the 72nd minute, Griezmann punished the sloppy Germany defence by tapping the ball in.
- Two minutes later, Kimmich hit the crossbar with a shot from 20 yards out.
- In the 76th minute, Julian Draxler's free kick from about 25 yards curled wide of the post.
- In the 82nd minute, Kroos' free kick was met by Howedes in the box. But his header sailed over the bar.
- In stoppage time, Mesut Ozil's free kick was headed away. Germany regained possession and Kimmich forced Lloris into a save. The goalkeeper flung himself to the left to keep Kimmich's powerful header out.
The talking point
Griezmann gave France the lead against the run of play with the last kick of the first half. But was it a penalty? Conspiracy theorists immediately suggested on social media that such a soft decision would only be given in favour of the hosts.
Patrice Evra had headed on to Schweinsteiger's right arm and there was no intention on the Germany midfielder's part to handle the ball. Yet Schweinsteiger should not have raised his arms and the ball did strike his hand. Germany conceded a similar penalty against Italy, with Boateng the offender.
Man of the Match
Griezmann. For a player who missed a penalty in the Champions League final just weeks ago, the Atletico Madrid star showed plenty of character in putting the spotkick into the top corner. He then displayed his poaching qualities to double France's advantage. Griezmann now has six goals - twice more than any other player at Euro 2016. And he now looks to be a shoo-in for the Golden Boot. He also created two chances on Thursday, delivered five crosses, and made five dribbles.
What the result means
Les Bleus will face Portugal in Sunday's final at the Stade de France.
Germany manager Joachim Low's contract expires in 2018 and he will now focus on qualifying for the World Cup. The holders are grouped with the Czech Republic, Northern Ireland, Norway, Azerbaijan and San Marino. Die Mannschaft's next competitive fixture is against the Czechs in October.
Should this be Low's final Euro as manager, he bows out with the most wins (11) in the continental showpiece. He also holds the record for most matches coached at the European Championship (17).
Only France's Michel Platini, with nine goals in 1984, has scored more goals at a single European Championship than Griezmann.
What they said
Griezmann: "I'm very pleased. We knew it would be very tough and we held firm defensively, our keeper played very well. We have to rest up well and already start thinking about the final."
Neuer: "I don't want to say that we were the better side but 2-0 was not a fair result. Of course the penalty was crucial but we had a whole half to equalise. We had chances but couldn't take them. France took their chances."