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. Pujara's innings had 14 boundaries.
Along with Kohli, Pujara added 183 runs for the third wicket.
At the break, the Indian skipper was batting on 123 having faced 161 balls, hitting 13 boundaries in all.
India currently lead by 199 runs.
Ajinkya Rahane, who is yet to open his account is giving Kohli company.
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".
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 eas singles were there for the taking.
Pujara as usual batted with unwavering concentration as Kohli hit a flowing cover drive. Lakmal strayed on Kohli's legs and the skipper repeatedly whipped the balls through mid-wicket region for boundaries.
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.