Johnson led most of the way at Chicagoland Speedway but Keselowski overtook him during the final round of pit stops, then controlled the last 25 laps to post his fourth win of the season and the eighth of his Sprint Cup career.
He bested Johnson by 3.17 seconds at the finish line and used the win to grab the Sprint Cup points lead for the first time in his career -- establishing a 3-point advantage over Johnson.
Former points leader Denny Hamlin finished 16th after running out of fuel on the final lap.
Jessica Simpson shares three-way kiss with friends in photo
Interpol investigating stolen passports on missing flight