A second successive home defeat for Chelsea following their 5-3 loss to Arsenal left them 12 points behind leaders Manchester City after 12 matches of the season.
Chelsea fell behind when Maxi Rodriguez struck after 34 minutes but equalised when substitute Daniel Sturridge scored at the far post 10 minutes into the second half.
The game at Stamford Bridge appeared to be heading for a draw until former Chelsea full back Johnson found himself in space on the right and burst into the penalty area before unleashing a low shot into the corner of the net.
Liverpool, unbeaten in nine matches in all competitions, climbed to sixth in the table, level on points with fourth-placed Chelsea, Tottenham Hotspur and Arsenal.
“It is not good to be so low in the table in relation to the leaders at this stage of the season but there is no running away from our responsibilities,” Chelsea manager Andre Villas-Boas told a news conference.
“There is no calling this a year of transition, no calling for time to do our work. Our responsibility is to win the most amount of trophies we can and at the moment we are in four competitions.”
Villas-Boas has endured a difficult start as Chelsea manager.
“It is not the brightest of starts in the Premier League for Chelsea in the last 10 years, but the belief is there from the team and that is what we have to focus on,” he said.
Liverpool manager Kenny Dalglish was delighted with his team.
“We played really well in the first half — they came back in the second half and put us under a bit of pressure, but we hung on in there and the result matched our ambition of wanting to win the game,” he said.
“Glen Johnson ran into their box in the 86th minute to score the goal to win the game, I don’t know what he was doing up there, but it’s an indication of how much we wanted to win when your right full-back is up there.”
Chelsea striker Fernando Torres, signed from Liverpool for 50 million pounds ($79 million) in January, and Andy Carroll who replaced him at Anfield for 35 million pounds both started on the bench but the visitors struck first after a breathless start to the match.
Charlie Adam dispossessed John Obi Mikel on the edge of the Chelsea penalty area to set up an exchange of passes between Craig Bellamy and Luis Suarez before Maxi Rodriguez swept the ball over a diving Petr Cech and into the far corner.
Bellamy, making only his second league start since returning to Liverpool, was at the heart of most of their first-half raids and Suarez put the erratic David Luiz under almost continual pressure every time Liverpool broke forward.
Suarez and Chelsea captain John Terry, both the subject of investigations into allegations of racism, had contrasting halves, with Suarez causing Chelsea problems and Terry looking far from his old assured self.
Chelsea, though, looked livelier after the break when Sturridge, who made his England debut against Sweden on Tuesday, immediately added pace to their attack and he equalised from close range following a surging run and cross from Florent Malouda.
Moments later Chelsea went close to a second but Liverpool goalkeeper Pepe Reina kept his side level with a brilliant point-blank save from Branislav Ivanovic who flicked on a Didier Drogba free kick.
Malouda twice went close for Chelsea as Liverpool defended in depth but the visiting team suddenly found inspiration in the shape of the marauding Johnson who surged into the penalty area and stroked the ball past the despairing Terry into the corner of the net.
Chelsea suffered their first back-to-back home league defeats since 2002 and will head for a Champions League match at Bayer Leverkusen in Germany on Wednesday having lost three of their last four league games.
Manchester City notched up their 11th win in 12 league matches with a 3-1 victory over Newcastle United on Saturday and Manchester United stayed five points behind their local rivals in second place with a 1-0 win at Swansea City.
Tottenham, who have two matches in hand on the other leading sides, will climb to third with victory over Aston Villa at White Hart Lane on Monday (2000GMT).