Det var Sverige som tog ledningen då Philip Broberg både var den som tog pucken från en kanadensare och senare avslutade anfallet snyggt.
Kanada svarade ändå snabbt och kvitterade genom Connor Zary.
Tidigt i andra tog kanadensarna också ledningen genom Alex Newhook.
Då var det Småkronornas tur att svara. Supertalangen Alexander Holtz fick pucken av Lucas Raymond och drämde in ett stenhårt skott bakom en skymd Taylor Gauthier i Kanadas mål.
Det var också Holtz som satte ledningsmålet till 3-2 i mitten av den tredje perioden då han styrde in Tobias Björnfots skott i numerärt överläge.
Kvitteringen kom igen då Zary satte sitt andra för kvällen med sju minuter kvar att spela.
Men Sverige gav sig inte och Albin Grewe satte 4-3 vid främre stolpen med bara två och en halv minut kvar.
– Vi är disciplinerade och får spela mycket powerplay. Vi trodde verkligen på det och i sista perioden hade vi bestämt oss, säger förbundskapten Magnus Hävelid.
I finalen möter man nu Ryssland som man slog enkelt med 3-0 i gruppspelet. De skrällde då slog ut giganterna USA efter straffar. Sverige har aldrig vunnit guld i U18-VM.
– Jag ska inte säga att det är en drömmotståndare, men för att vara i final är det ett trevligt motstånd, säger SVT Sports expert Jonas Andersson.
I bronsmatchen möts alltså USA och Kanada.