Brazilian Beto scored the winner with a freekick from just outside the area in the 38th minute. The midfielder, though, was sent off 10 minutes before the end after receiving a second yellow card.
Champions Porto are still top of the table on 25 points, two points ahead of Boavista who meet bottom club Moreirense on Sunday.
Porto, without suspended defender Jorge Costa and South African striker Benni McCarthy, spurned several chances to equalise.
The biggest cheer of the night from a 25,000 crowd at Dragao stadium was for Porto chairman Jorge Nuno Pinto da Costa, who arrived at halftime after more than three hours of questioning as part of a probe into alleged attempts to influence referees.
More from rediff