Chasing 300 to win, India could only manage 225 in 46.5 overs in response. Captain MS Dhoni [ Images ] top-scored for India with 67 and was the last man out.
The loss meant the end of a personal streak of Dhoni. He had hitherto never lost a one-day series in Sri Lanka as captain, winning all his four previous assignments in charge.
The loss was his 31st - against 49 wins - in ODIs as a captain.
It was India's 500th away game - making them only the second cricket team after Pakistan (542) to play that many matches away from home - and a not so memorable one.
It was also a sweet revenge for Sri Lanka, having lost to India in the Asia Cup final in June.
After putting on a formidable total on board, Sri Lanka kept an upper hand against India, by taking crucial wickets at regular intervals.
Thissara Perea and Suraj Randiv [ Images ] were the pick of the Lankan bowlers, picking up three wickets apiece.
The bane of the Indian innings was the lack of partnerships as also the fact that none of their batsmen, save MS Dhoni, could manage a big score.
Many of the batsmen had starts but couldn't carry on. Similarly, a few partnerships looked threatening without actually doing so.
The Indian innings got off to a disastrous start when Dinesh Karthik [ Images ] (0) was caught by Kumar Sangakkara [ Images ] down the leg to give Lasith Malinga [ Images ] a birthday present and Sri Lanka their first breakthough.
The in-form Virender Sehwag [ Images ] (28) though helped ease the pressure with some trademark agggressive batting. However, he was unfortunately run out in the six over having survived a similar attempt two balls earlier.
Sehwag had been India's best batsman in the tournament and even his short innings in the final was inclusive of as many as six boundaries.
However, Yuvraj Singh [ Images ] (26), who for the first time in the series looked in good touch, didn't survive long. Perera induced an inside edge of his blade and Sangakkara made no mistake.
Yuvraj's 31-ball essay was inclusive of four boundaries and his third-wicket partnership with Kohli yielded his side a valuable 50 runs.
Kohli and skipper MS Dhoni milked around the bowling for some time before the former's frustration - at not being able to break free - got the better of him and he hit a Perera delivery straight to Angelo Mathews [ Images ] at third man.
Soon after Suresh Raina [ Images ] arrived at the crease, he came down the track and smashed Perera over long-off for the first maximum of the Indian innings.
A few overs later, Raina helped himself to another maximum, on this occasion over long-on off Suraj Randiv.
However, Raina's cameo ended sooner than wanted, the southpaw skying a Randiv delivery straight to Dilshan at covers.
Raina was involved in a 49-run stand for the fifth wicket with his captain. Randiv struck again a few overs later when he had Rohit Sharma [ Images ] (5) out stumped.
With India in trouble at 181 for six after 35 overs, the batting powerplay was taken.
Praveen Kumar [ Images ] (14), after surviving a loud leg before appeal soon after his arrival at the crease, smashed Kulasekara straight over the head for a maximum. He also managed to steer Malinga over the vacant third man region for a boundary.
But Malinga came back to take his revenge, rattling Kumar's stumps with an inswinging yorker.
Dhoni reached his 37th ODI fifty in the next over with a single to long-on. However, India could manage only 29 runs in the batting powerplay and that ensured any remote hopes of an Indian comeback evaporated.
And when Dhoni dragged a Randiv delivery onto his stumps it was all over.
Earlier, Tillekeratne Dilshan [ Images ] and Kumar Sangakkara helped Sri Lanka put up a competitive total.The home side made 299 for eight in the stipulated 50 overs to set India a target of exactly 300 to win.
And it was Dilshan (110) who led the charge with an impressive hundred, his first on home soil.
It was his eight ODI century overall, and his third against India. And a special one at that.
All seven of Dilshan's previous centuries had come away from home, his previous highest score on home soil being 97 against India at RPS.
The right-handed opener's 115-ball innings was incluisve of 12 hits to the fence and a huge one over it.
Besides, Dilshan's the other significant contribution in the Sri Lankan innings came off the blade of their captain.
Sangakkara made an aggressive 62-ball 71, his knock inclusive of seven boundaries and a six. The duo shared an 85-run third wicket stand to build on the solid foundation made by a century-plus opening wicket partnership between Dilshan and Mahela Jayawardene [ Images ] (39).
The home team was also helped considerably by some poor bowling by the visitors, supported by some equally sloppy work in the field.
Sri Lanka scored 80 runs in the last 10 overs, with 38 coming in the last five, the period being highlighted by some wayward bowling by the Indians.
Earlier Jayawardene, promoted up the order, opened the batting for Sri Lanka but it was the in-form Dilshan who broke the shackles with two boundaries, one through midwicket and the other past backward point, in Kumar's second over.
However, Jayawardene soon cut loose, first pulling Munaf between midwicket and square leg for his first boundary and then smashing Nehra over mid-on for his second just two balls later.
Ishant, India's fourth seamer, was introduced into the attack in the 10th over and Dilshan welcomed him by smashing the first ball through point for his fifth boundary.
After 10 overs, Sri Lanka were 52 without loss, the first time in this tournament that any team had not lost a wicket inside the first 10 overs: the tournament average stood at two wickets per game.
In the first of Ishant's second over, it was Dilshan's turn to attack - the ball was hammered over long-on for the first maximum of the innings. The next ball earned Dilshan another boundary over midwicket.
And then Jayawardene joined the party, caressing through the offside for another boundary. Ishant's second over cost India 15 runs.
Dilshan soon completed his 21st half century with a cut off Nehra that went to the backward point boundary. His next scoring shot, a couple to square-leg helped Sri Lanka reach the 100-run mark, at less than a run-a-ball. It also marked the century partnership for the opening wicket, a first in the tournament.
Soon after, Jayawardene, needing just 36 runs to reach the 9000-run mark at the start of the innings, reached the landmark with a single to cover point off Yuvraj Singh.
Jayawardene thus became only the third Sri Lankan - after Sanath Jayasuriya [ Images ] (13, 377) and Aravinda De Silva (9284) - and the 13th batsman overall to reach the 9000-run landmark in one-day internationals.
However, he fell soon after, Ishant getting a leading edge off his blade and Dinesh Karthik making no mistake at sweeper cover. The first wicket partnership yielded the home side 121 runs.
Upul Tharanga (6) didn't survive long, Yuvraj inducing an edge of his blade and MS Dhoni doing good work behind the stumps.
Dilshan eased the pressure with two sweetly-timed boundaries in succession, both through extra cover, off Munaf.
He and his captain Sangakkara continued building on the foundation, with the latter bringing on the 50-run partnership for the third wicket with a massive six over midwicket off a Sehwag full toss.
Dilshan reached his eighth one-day century but was dismissed soon after. In his attempt to clear the boundary, he only succeeded in hitting a Kumar delivery straight to Ishant at deep backward square leg.
Dilshan's dismissal brought to an end an useful 85-run stand for the third wicket with Sangakkara. The latter brought about his 58th ODI half century with a boundary off Kumar.
Chamara Kapugedera's [ Images ] (12) stay was brief but entertaining. He hit two boundaries in a Kumar over before holing out a Nehra delivery straight to Karthik at deep backward square leg.
Angelo Mathews (1) fell in the next over (bowled by Ishant), caught by Rohit at midwicket. It was a sweet reward for Ishant after Sangakkara had smashed three successive boundaries off him in the same over.
Five balls later, Sri Lanka suffered a crucial blow to their ambition of putting up a 300-plus total when Sangakkara was caught at covers by Rohit off Munaf. Sangakkara's dismissal meant the hme team had lost three wickets in three overs.
And that marked a slump from being comfortably-placed at 219 for three after the 40th over, Dilshan was dismissed in the fourth ball of that over.
Perera (6) and Randiv (4) also fell by the wayside in the final overs.
However, Chamara Silva (26 not out) ensured his side a good finish, albeit aided by some equally bad Indian bowling.
Earlier, Sri Lanka win the toss and palpably elected to bat first against.
"We have the same side that played India in the last game and are looking to exploit the conditions," said Sangakkara, the Sri Lanka skipper.
His opposite number, MS Dhoni, remained unperturbed as ever.
"We have the momentum after win in the last game but the batsmen need to do a bit more," he said.
Rohit Sharma came in place of Ravindra Jadeja [ Images ] in what was the lone change in the Indian side.