They will face Sweden, 2-1 winners over Finland in the other semi-final, on Sunday to decide the gold just hours before the closing ceremony.
Jamie Benn scored early in the second period for the game's only goal as Canada once again came out on top in what was a mouth-watering do-or-die rematch of the 2010 Vancouver Winter Games gold medal contest.
Carey Price was brilliant in the Canadian net, stopping 31 shots to earn the shutout.
Thousands of miles and nine times zones away, hockey-mad Canadians - still buzzing from a stunning 3-2 overtime win over the United States in the women's final on Thursday - came together for another day of compelling action on the ice.
Businesses and work places across the Great White North emptied and bars filled to capacity as millions of hockey fans tuned in to watch the first meeting between the North American rivals since Canada claimed the Olympic title four years ago in Vancouver with a golden goal from Sidney Crosby.
Canada are trying to win their first Olympic gold medal outside North America in 62 years and become the first country since the 1988 Soviets to successfully defend the title.
A unified team also won in 1992 after the break-up of the Soviet Union.
Earlier at the Bolshoy Ice Dome, Erik Karlsson's second-period blast from the point put Sweden through to the gold medal final for the second time in three Olympics.
The game against Finland, a repeat of the 2006 Turin Games final, got off to a sluggish start as both sides seemed wary of committing the first mistake and falling behind in what was expected to be a tight affair.
After a scoreless opening period, Finland opened the scoring when Olli Jokinen beat Swede Jimmie Ericsson to a loose puck and fired a shot that squeezed through Henrik Lundqvist's legs and trickled over the goal line.
Sweden struck back five minutes later when Loui Eriksson sent a low shot past a sprawling Kari Lehtonen, who was starting in place of the flu-ridden Tuukka Rask.
Karlsson put his team in front when he fired a shot from the point that hit Lehtonen before finding its way into the net with less than four minutes to play in the second period.