Campbell has made 36 appearances for Pompey since joining from Arsenal last summer and was recently recalled to the England squad before injury ruled him out of Steve McClaren's plans.
Campbell, who recently replaced the departed Dejan Stefanovic as skipper, told the club's website: "I'm delighted to have signed a new contract.
"It's dragged on a bit but everything's been resolved. There's always a bit of speculation around the transfer window but thankfully that's over now and I can just concentrate on playing football.
"The club's moving forward with a talented squad and plans for the new training ground. The club is certainly going in the right direction."