Ghana, who started as favourites to extend their lead in the group, played a defensive-minded game and succumbed to an own goal by Udinese centre-back Nicholas Opoku on 40 minutes.
Kenya were undeterred by Ghana’s approach and Ovella Ochieng, captain in place of the injured Victor Wanyama, twice went close to giving the hosts an early lead.
Ghana then threatened from a free-kick after Nantes striker Majeed Waris was upended on the edge of the area, but Atletico Madrid’s Thomas Partey blasted his attempt wide.
Michael Olunga had a big hand in Kenya’s goal just before half-time, with Opoku putting the ball into his own net as he tried to stop the imposing Kashiwa Reysol forward.
Kenya played the final half-hour a man down after defender Joash Onyango was shown a straight red card for a foul on Waris.
Victory for Kenya moved them alongside Sierra Leone, who beat them 2-1 in the first round of matches in June 2017.
Ghana remain on three points in third place with Ethiopia, who host Sierra Leone on Sunday, yet to pick up a point.
Download our app and read this and other great stories on the move. Available for Android and iOS.