The decisive moment came 74 minutes in, as Havenaar got on the end of a ball from Yuichi Komano. The lanky striker scuffed his shot but made enough contact to see it go into the bottom right corner for what would ultimately turn out to be the winner.
That followed Shinji Okazaki’s ninth-minute opener, in which he chipped Milan Borjan after the Canadian goalkeeper botched a clearance attempt.
On 58 minutes, Canada brought the score to 1-1 from a corner, as Portland Timbers captain Will Johnson whipped in a ball which Marcus Haber stooped to convert for his first senior international goal.
Just moments after Okazaki’s opener, Japan nearly made it two, as Okazaki crossed to Ryoichi Maeda, but Borjan managed to get down to gather the quickly taken shot.
On 20 minutes, Yasuhito Endō took a free kick from the edge of the area, curling it into the top right corner. It deflected off the inside of the post before hitting Borjan and going out of play awkwardly to safety.
Canada’s only half-chance of the opening period came 10 minutes later, as Johnson, Randy Edwini-Bonsu and Atiba Hutchinson linked up outside the area, before Hutchinson’s ball into the area just evaded the head of a wide open Haber.
In the 38th minute, Johnson attempted a shot from just outside the area, which dipped near the end, but ultimately went over the bar.
At the start of the second half, substitute Havenaar found himself on a breakaway, but attempted a chip which ended up going wide to the right of Borjan’s goal.
Borjan nearly got himself in trouble in the 64th minute, as he came out to intercept a ball but was beaten to it by Gotoku Sakai, who rounded him well but failed to convert on the open goal from a tight angle.
In the 81st minute, Hutchinson ran through the middle with no pressure, before unleashing a low left-footed shot. Japanese goalkeeper Eiji Kawashima got down well to make the save and force the corner.
Canada is next in action on Monday, as it plays a friendly against Belarus. The match will also take place in Doha.