The result secured at least a top-two finish for the Croatians, who have 17 points from eight games ahead of their crunch October 11 home game against Belgium, who sit on 22 points after a 2-0 win in Scotland.
It also knocked out the Serbians, who had the upper hand and missed several chances in the first half before Mario Mandzukic fired Croatia ahead against the run of play in the 53rd minute.
Striker Aleksandar Mitrovic drew Serbia level to set up a frantic finish in which the home fans, who directed sporadic volleys of verbal abuse at the Croatians, launched several flares and firecrackers.
"We are a bit disappointed not to have won the game after taking the lead and having an extra player on the pitch later on," Croatia coach Igor Stimac said.
"We had it under the control but lost our focus in the closing stages and an experienced team like us shouldn't let that happen.
"We stuck to the plan to soak up pressure in the first half and let Serbia tire in the second. The game went according to script until we let in a goal from a set piece and then had Simunic sent off."
Roared on by the crowd, Serbia pegged the visitors back from the start and nearly took an early lead when Mitrovic rattled the crossbar from close range after the Croatians failed to clear a corner.
With both teams playing in adventurous 4-2-3-1 formations, Serbia's youthful and athletic outfit stifled Croatia's playmaker Luka Modric and cut off the supply routes to Mandzukic.
But the Bayern Munich hitman showed his class when he calmly collected a superb long pass by captain Darijo Srna and beat keeper Vladimir Stojkovic with a crisp low shot from 13 metres in the 53rd minute.
Croatia's joy was short-lived though, as Mitrovic rose above his markers midway through the second half to head home a corner by substitute Miralem Sulejmani.
The match turned sour in the closing stages as Serbia midfielder Nemanja Matic was sent off for a second bookable foul in the 75th minute and Croatia defender Josip Simunic got a straight red for a vicious tackle on Sulejmani shortly afterwards.
The home fans threw several missiles at the visiting centre back as he trudged off the pitch but Stimac played down the incident, acknowledging it was an all too familiar scene at Balkan football grounds.
"We didn't pay too much attention to what was going on in the terraces because that happens a lot in Croatia too and I can only hope that fans in this part of the world start behaving themselves soon," he said.
Serbia coach Sinisa Mihajlovic conceded his youthful side paid the price for inexperience and hoped for better luck in attempting to qualify for the 2016 European Championships.
"Maturity comes with age but the lads showed tonight that they have a bright future and are worth the faith we have put in them," he said.
"Croatia showed all their resourcefulness and punished us the first time we made a mistake, hence I am delighted with the way we responded and kept going until the final whistle.
"We have a clear conscience because we left everything out there in every match, maybe we are paying the price for having a bit of luck in some previous qualifying campaigns."