Canada will play for bronze on Sunday against Russia, which lost 2-1 to host Sweden in a game that ended in a brawl. Canada lost the bronze-medal game to the Russians last year in Ufa to end a run of 14 years of finishing in the top three.
Sweden will play Finland for gold.
Joni Nikko got a lucky goal off a funny bounce off the end boards to start the second-period onslaught. Finland added goals from Artturi Lehkonen and Rasmus Ristolainen.
Jonathan Drouin replied for Canada, but Finland captain Teuvo Teralainen scored on a penalty shot at 16:49 of the third and then scored into an empty net to seal the victory.
The loss assured that Canada will go five years in a row without gold after winning the tournament five times in a row from 2005 to 2009.
It also marked the first regulation time loss for coach Brent Sutter in three world junior tournaments, having won gold without dropping a game in 2005 and 2006. This year's squad lost a game in a shootout to the Czech Republic in the preliminary round.
The large contingent of red-and-white clad Canadian fans in the crowd of 11,544 at Malmo Arena kept the noise level high through a desperate third period, but Finnish goalie Juuse Saros shut the door.
The Finns frustrated Canada by playing for counterattacks with tight checking in the neutral zone and by collapsing around Saros to keep shooters to the outside.
They got the break they wanted when Julius Honka of the Swift Current Broncos dumped the puck in and saw it take a strange bounce off the Zamboni entrance door. Nikko pounced on the puck to beat an otherwise sharp Zachary Fucale.
Lekhonen was at the doorstep to fire a Saku Maelananen rebound into an open side on a power play for a two-goal lead.
A Finland power play had just ended when Drouin grabbed a lose puck from a scramble in front of Saros to score into an open side at 11:24.
Fucale made a sprawling save at the side of the net, but Ristolainen, on loan from the Buffalo Sabres, went around the other side, got past Aaron Ekblad and scored just under the crossbar at 15:36.
The second period was a nightmare for Canada.
After scoring, Drouin took his second checking to the head penalty, which is a minor and a 10-minute misconduct, for a hit he felt was legal. And Nic Petan was penalized for abuse of an official after a good scoring chance was thwarted.
Derrick Pouliot later hauled down Henrik Haapala on a breakaway. Despite Canadian protests, Teravainen took the penalty shot because Haapala claimed he had injured his right hand.
Against Switzerland this week, Canada wanted Drouin to take a penalty shot but the officials said Anthony Mantha had to take it because he was the player that was fouled.
Fucale was sharp in a scoreless first period in which Canada laboured to establish a cycle in the Finland zone. He stoned Saku Kinnunen after a turnover in Canada's end late in the frame.
The Finns, who finished seventh last year, are assured of ending a seven-year medal drought. They have not won this tournament since 1998.
Notes: Canada is 22-8-6 all-time against Finland at the world juniors, but 1-2 in semifinals. ... Defenceman Mattew Dumba and forward Charles Hudon were both fit to play after missing practice Friday with minor injuries.
Also on HuffPost