Messi scores as Barca draws AC Milan
Robinho gave Milan a deserved lead after only nine minutes at a packed San Siro, shortly after Sulley Muntari's strike had been ruled out for offside. The Brazilian forward linked up impressively with compatriot Kaka, who showed flashes of his old form after a disappointing few seasons at Real Madrid, and steered the ball home from close range.
Messi leveled in the 23rd from a similar range after being left in space by Milan's rearguard, taking advantage of a mistake by Milan defender Kevin Constant.
Barcelona remains atop of Group H after two wins and a draw. Milan is second, two points behind.
In the other group match, Celtic picked up its first points with a 2-1 victory over Ajax.
It was the seventh time in three seasons the two teams had met in the Champions League, with Milan's 2-0 home win in last year's quarterfinals its best result. Barcelona humiliated the Italian side 4-0 in the return leg.
Messi, who had scored five times against Milan, started for Barcelona after recovering from a minor injury.
Milan was missing Stephan El Shaarawy and Giampaolo Pazzini up front, both out injured. Mario Balotelli had a thigh problem and was only fit for a place on the bench so Kaka - who had only just returned from injury - started alongside Robinho and Valter Birsa, with Alessandro Matri dropped to the bench.
Kaka, who previously played for Barcelona's bitter rival Real Madrid, had an impressive performance and went off to a standing ovation when he was substituted in the 71st minute.
Milan started the brighter, forcing Barcelona to defend deep at the outset and the Italian side had the ball in the back of the net in the seventh minute. Robinho carved out some space for himself on the edge of the area and threaded the ball through to Muntari, who drilled it home, but it was ruled out for offside.
There was no conjecture two minutes later. Robinho took advantage of a mixup between Gerard Pique and Javier Mascherano just inside the Barcelona half and charged downfield before playing a swift one-two with Kaka and slotting it past an onrushing Victor Valdes and into an empty net.
Barcelona had rarely threatened in the opening stages and its best chance came in the 19th minute when Messi curled a free kick the wrong side of the near post from the right of the penalty area.
The Spanish side went closer a minute later when Messi sent a low ball across the face of goal which Milan goalkeeper Marco Amelia did well to smother.
Barcelona leveled shortly afterward as Milan lost the ball in midfield and Andres Iniesta picked out an unmarked Messi, who cut inside and evaded Constant to squeeze a shot into the bottom right corner.
Milan almost restored its lead four minutes later but Philippe Mexes headed a corner just the wrong side of the right hand post.
The frantic pace of the opening half hour calmed down somewhat but Barcelona nevertheless had chances to take the lead before halftime as first Neymar's speculative long-range shot flew past the right upright before Amelia got down well to block an Alexis Sanchez volley.
Neymar had another good opportunity on the stroke of halftime as Cristian Zapata's header came out to the unmarked Brazilian on the left side of the area but he volleyed just past the right upright.
Robinho should have restored Milan's lead six minutes after the break but the Brazilian, who was all alone in the middle of the area, appeared to misjudge the flight of Muntari's pass and jumped over it as it rolled harmlessly wide.
Balotelli was brought on for Robinho shortly after the hour mark, much to the crowd's delight, and his team went close to taking the lead moments later when Montolivo spun on the ball in midfield and picked out Constant, who drove a long-range effort past the right post.
Neymar should have scored in the 70th but he struggled to bring the ball down just in front of goal and missed from close range.