Vettel inherited the lead from pole-sitter Lewis Hamilton of McLaren, who led the race until he suffered a gearbox failure on lap 23 of 59 and had to retire. It was defending champion Vettel's second win of the season after Bahrain and he reinvigorated his chances of earning a third straight title.
"We benefited a little bit from Lewis' failure," Vettel said. "We had a very, very strong pace all weekend and a good start, which got us in the hunt.
"I am just incredibly happy and proud."
Vettel had to defend his win both on the track and in the stewards' room after the race, having been called in to explain an incident behind the safety car when he hit the brakes unexpectedly at the exit of a corner, forcing second-place driver Jenson Button of McLaren to quickly swerve, with a collision narrowly avoided. Stewards cleared him of wrongdoing.
Hamilton suffered his third non-finish in five races — interspersed with two wins — as his gearbox finally gave up, having leaked fluid for three to four laps before he retired.
"It's heartbreaking not to have finished the race today," Hamilton said. "We definitely had the pace to win this weekend. In fact, before I retired, I was cruising."
Button was right on the tail of Vettel when racing resumed after the safety car with 18 laps to go, but said his car felt unbalanced in the closing stages, and he was not able to challenge the German.
The race was stopped when it reached the two-hour time limit, two laps before its scheduled finish, chiefly due to two safety car periods.
Alonso finished third in his Ferrari, with his championship lead trimmed from 37 to 29 points with six races to go, giving Vettel fresh impetus as he seeks to join Juan-Manuel Fangio and Michael Schumacher as the only men to have won three straight F1 titles.
"It looks better than before," Vettel said. "We have a lot of races left, the car seems to be competitive and we just have to use the momentum and keep pushing for these last races and see what happens."
Force India's Paul di Resta finished a career-best fourth ahead of Mercedes' Nico Rosberg. Kimi Raikkonen of Lotus was sixth and maintained third place in the championship standings despite not having won a race. Lotus teammate Romain Grosjean was seventh.
Felipe Massa of Ferrari finished eighth after dropping down to last following a first-lap puncture, and he finished ahead of Toro Rosso's Daniel Ricciardo, in only his second points finish of the season.
Fellow Australian Mark Webber of Red Bull crossed the line in 10th, but was given a 20-second penalty for overtaking off the limits of the track, dropping him down to 11th and moving Sauber's Sergio Perez into the last points position.
Schumacher was also given a penalty after crashing heavily into the back of Toro Rosso's Jean-Eric Vergne. He was handed a 10 grid-place penalty for the next race, as he admitted the error and it was his second similar offence this season.
Button was relatively pleased with second place, though disappointed with Hamilton's non-finish, which put a major dent in McLaren's bid to end a 13-year drought in the constructors' championship.
"Seb didn't make any mistakes and we finished second," Button said. "It's good to get some points on the board after the retirement at Monza.
"It's disappointing for the team to have another DNF (did not finish). We can't seem to do it with both cars and for sure that is something we need to work on for the remainder of the season."
Alonso acknowledged that Ferrari continues to struggle for pace, and his race was one of several which were compromised by the timing of the safety-car interventions, but he was satisfied with having maintained a good buffer atop the standings.
"It's a fantastic result in terms of points," Alonso said. "It's a positive weekend, a very good weekend; of the four, five contenders we lost points to one and with the others we increased our advantage."
Williams driver Pastor Maldonado started in a surprise second place and was running in third position halfway through the race but was forced to retire with a hydraulic failure.Suggest a correction