Pakistan made 260-5 from their 50 overs thanks to Fawad Alam’s 114, before opener Lahiru Thirimanne hit 101 to help Sri Lanka seal victory with 22 balls remaining.
Fast bowler Lasith Malinga’s 5-56 restricted Pakistan after they had recovered well from 18-3.
It is the first time Sri Lanka have won the trophy since 2008.
Having won the toss and decided to bat, Pakistan needed more heroics from Fawad, who hit 74 off 70 balls against Bangladesh to seal their place in the final.
He shared in a third-wicket partnership of 122 in 32.1 overs with Misbah-ul-Haq and then helped Pakistan accelerate by adding 115 in only 13 overs with wicketkeeper Umar Akmal, who hit 59 off 42 balls.
He finally reached his first one-day international century off 134 balls, including eight fours and three sixes.
Sir Lanka also struggled in reply, spinner Saeed Ajmal dismissing opener Kusal Perera and Kumar Sangakkara with successive balls to leave them struggling on 56 for two.
But Thirimanne teamed up with former captain Mahela Jayawardene and forged a 156-run third-wicket stand spanning 27 overs to put them back on course.
Jayawardene fell for 75 – his highest score in 15 one-day internationals since scoring 107 against India in Kingston last July – but Thirimanne continued to reach his century and all but secure Sri Lanka’s triumph.
It is their fifth Asia Cup success, equalling the record of India.