Canada await USA after they inflicted further heartbreak on Brazil, whose wait for gold in this event goes on.
Beaten semi-finalists in Rio five years ago, Brazil were held to a 0-0 draw before suffering another defeat on penalties to the 2016 bronze medallists.
Goalkeeper Stephanie Labbe, who was injured in the closing stages of extra time, recovered to make two critical saves in the shoot-out to secure a 4-3 win.
"In the moment, it was about trusting myself, trusting my instincts, and trusting my ability to make a save," she said afterwards.
"Pain is temporary. We have our eyes on the prize."