Ajinkya Rahane was on 43 at the close, with Indian captain MS Dhoni on 17 in an unbroken 36-run stand for the sixth wicket.
The tourists were in early trouble at 24/2 in the morning session, after they won the toss and chose to bat, but Kohli anchored a couple of key partnerships in a valiant recovery.
With massive boots to fill, after taking the number four spot from recently retired maestro Sachin Tendulkar, the 25-year-old top-order batsman delivered in style by racking up his fifth career ton.
Kohli spent more than four hours at the crease and faced 181 deliveries for his 119 runs, which included 18 boundaries.
He shared 89 runs with Cheteshwar Pujara, who contributed a patient 25 from 98 deliveries, for the fifth wicket.
He left his partner stranded, however, after a poor call midway through the second session, and Pujara was run out by Imran Tahir.
Kohli later paired up with Rahane as the duo put on 68 runs on either side of tea, before he gifted JP Duminy a simple catch in the covers with less than 15 overs remaining in the day’s play.
The Proteas pace attack combined well, with Dale Steyn, Vernon Philander, Morne Morkel and Jacques Kallis bagging one wicket each.
They were let down, however, by spinners Tahir and Duminy, who were unable to maintain the pressure in expensive spells.