Finland utmanade segermålet för offside – men fick inget gehör hos domarna, utan åkte i stället på en utvisning.
"Lejonen" chockade Kanada genom att göra matchens två första mål – men det hjälpte inte.
Floridaforwarden Sam Bennett tog en helt onödig utvisning i slutet av första perioden när han fullföljde och körde på finländske målvakten Juuse Saros.
Det small direkt i det numerära överläget.
Sebastian Aho vann tekningen och stjärnan Mikko Rantanen smackade in ledningsmålet bakom Jordan Binnington efter tre sekunder.
Slarv i powerplay
I starten av andra perioden fick Kanada ett numerärt överläge – men släppte in 0-2. Efter slarv vid offensiv blålinje kunde Joel Armia frispela Erik Haula som lyfte in andra målet med en backhand.
Kanada var skakat och saknade ledaren och lagkaptenen Sidney Crosby som missade semifinalen efter smällen han fick i kvartsfinalen mot Tjeckien.
Det skulle dock komma en nödvändig reducering.
Nästa gång Kanada fick spela powerplay styrde Sam Reinhart in pucken efter att Cale Makar skjutit.
Avgjorde med 36 sekunder kvar
Kanada var illa ute redan mot Tjeckien, men kunde kvittera och avgöra genom Mitch Marner i förlängningen.
Den här gången kom också ett kvitteringsmål då backen Shea Theodore hittade rätt med ett kanonskott.
Och i numerärt överläge, med bara 36 sekunder kvar, spelade Connor McDavid fram MacKinnon till segermålet.
Kanada ställs mot vinnaren i kvällens semifinal mellan USA och Slovakien i final på söndag.




