Alonso was never very far in front but was always able to stay just far enough ahead of first Vettel and then Button to ensure they could not use their DRS overtaking aids to pass him into the hairpin at Turn 6.
It led to a tense grand prix in which the identity of the winner was always in doubt until Alonso took the chequered flag.
The Ferrari made a lightning start from pole position and although Vettel quickly closed up the initial gap Alonso had built on the first lap, the Spaniard was able to pull clear before their first pit stops to ensure he held the lead into the second stint.
Meanwhile, Button was fighting past Hulkenberg and then Schumacher, to move quietly into third place.
Vettel emerged from his first pit stop five seconds ahead of Button but the McLaren closed remorselessly on the Red Bull and passed the German by making his second stop a lap earlier.
Vettel emerged from the pits to find Button on his outside on the run to Turn 2, and the McLaren easily took the position.
- Lewis Hamilton
- Fernando Alonso
- Mark Webber
- Lewis Hamilton
Button was rarely more than a second behind Alonso from then until the end of the race but the Ferrari driver was always in control and in the closing laps he stretched away as Button began to lose grip in his rear tyres.
Rather than try to take the lead, Button had to spend the closing laps fighting off a late challenge from Vettel, who passed him at the Turn 6 hairpin on the penultimate lap.
Vettel said: "The pace was there but it was extremely difficult when I was close to Fernando and Jenson we seemed to lose a lot and not be able to stay close enough to try to something under braking.
"I am not entirely happy, it could have been a bit better if it was clean air most of the race but that was not the case. Second place was the best we could get today and I am happy with that."
Button said: "It was a close race and I couldn't quite get Fernando at the end.
"When you are in the middle of three you really have to fight and I was pushing a little bit more in the early part of the stint, whereas when you're in front you can coast a bit in the bits where you don't need to push.
"It was close but Fernando knows as we all do where to use Kers to keep someone behind you. I ran out of steam at the end of the straight and the gap was a little bit too big to get back.
German Grand Prix wins by team
"But it was a fun race and it's nice to be on the podium again. I've had my feeling back the last two races but the pace hasn't been there [in the car], but today it was. We're there or thereabouts at the front, still a little way to go."
Raikkonen provided some exciting racing as he moved up from 10th on the grid.
On the way, Raikkonen engaged in top-class racing with Mercedes driver Michael Schumacher and the Force Indias of Nico Hulkenberg and Paul di Resta.
Schumacher finished seventh behind Sauber drivers Kamui Kobayashi and Sergio Perez. Hulkenberg and Di Resta took the final points positions in ninth and 10th.
This page is best viewed in an up-to-date web browser with style sheets (CSS) enabled. While you will be able to view the content of this page in your current browser, you will not be able to get the full visual experience. Please consider upgrading your browser software or enabling style sheets (CSS) if you are able to do so.