Fakhar capitalised on a lucky escape to strike a superb 114 and lift Pakistan to a commanding total of 338/4, while fast bowler Amir ripped out India’s top-three batsmen before the defending champions stumbled to 158 all out.
Coach Mickey Arthur’s men had come into the tournament as the lowest-ranked team and lost heavily to India in their opening group match, but they beat South Africa and Sri Lanka to make the semifinals where they knocked out hosts England.
After India had won the toss, Fakhar, on three, was caught by wicketkeeper Mahendra Singh Dhoni off a Jasprit Bumrah no-ball and the 27-year-old left-hander took full advantage to make his first international century.
He shared a fluent century opening partnership with Azhar Ali (59), the pair unleashing a barrage of crisp attacking strokes all around a sun-kissed ground.
Azhar also continued his fine form, reaching 50 off 61 balls before he was run out.
Fakhar, meanwhile, got to three figures by sweeping Ravichandran Ashwin to the boundary.
He celebrated with an extravagant twirl of his bat and kissed the turf as the Pakistan supporters sensed an unlikely win.
Fakhar hit 12 fours and three sixes before skying a catch off Hardik Pandya but Pakistan had the perfect platform to make the highest total in a Champions Trophy final.
Babar Azam chipped in with a solid 46 and Mohammad Hafeez struck three sixes in a punchy unbeaten 57 that left India needing to produce the highest successful run chase in the tournament’s history to lift the trophy for the third time.
Within three overs, however, their reply was in tatters as Amir (3/16) produced a devastating spell of bowling.
He trapped Rohit Sharma LBW for nought with a swinging delivery and removed India talisman Virat Kohli with another fine ball which the captain could only edge to point for five.
Their hopes now rested largely on the shoulders of Shikhar Dhawan, but after he departed for 21, it was game over for India.