At tea, India amassed 507 for four with Kohli and comeback man Rohit comfortably batting at the crease.
Kohli consolidated India's position as he reached the landmark in 130 deliveries hitting 10 boundaries. This was also Kohli's 12th hundred as India captain surpassing Sunil Gavaskar's 11 tons.
Cheteshwar Pujara (143) looked unflappable during his 362-ball stay before controversial seamer Dasun Shanaka bowled a yorker to remove the India No 3.
At the final break of the day, the Indian skipper was batting on 170 having faced 223 balls, hitting 23 boundaries and a six in all.
More From This Section
India currently lead Sri Lanka by a huge 302 runs.
Ajinkya Rahane (2) turned out to be a rare failure as Rohit, playing his first Test match in more than a year, breezed through to an unbeaten 51 off 108 balls with some delectable shots. The boundaries were sheer elegance and he also hit a six off Rangana Herath.
The Sri Lankan bowlers were unable to find an answer to their woes on a benign pitch that had forced one of their bowlers -- Shanaka -- to "alter the condition of the ball" yesterday.
The Sri Lankan bowlers lacked stomach for fight which was evident from the fielding placing of Dinesh Chandimal as India started the day at 312 for two.
Suranga Lakmal and Lahiru Gamage bowled with deep square leg, deep fine leg and deep extra cover making it clear that they did not want to concede boundaries. The easy singles were there for the taking.
It was a whip to deep midwicket for a single that brought Kohli's 19th hundred in Test cricket. There wasn't any exaggerated celebration this time unlike Kolkata, where he had bailed the team out of trouble.