UConn kicker Matt Nuzie, who missed a 26-yard try and an extra point attempt earlier in the game, made a 21-yarder with 3:40 left to give the Huskies (2-0) the lead for good.
Connecticut trailed 20-6 early in the fourth quarter when receiver Brian Sparks made his first catch of the year on fourth down at the Duke 7-yard line. Cornell Brockington ran the ball in from a yard out to make it 20-13.
Two plays later, senior cornerback Justin Perkins stepped in front of a pass from Duke's Chris Dapolito and ran it back 27 yards for a touchdown. Nuzie's extra point was blocked.
Dapolito got his first start of the season for Duke (0-2), and threw for a career-high 129 yards and a touchdown, before being pulled before the game's last drive for sophomore Mike Schneider.
Dan Orlovsky was 23-of-34 for 290 yards for UConn. Keron Henry had a career-high 97 yards receiving for Connecticut, all of them before halftime.
Duke used two big defensive plays to build a 13-3 lead at intermission.
With three minutes left in the first quarter, cornerback John Talley stepped in front of Henry and took the interception 62 yards down the sideline for a 7-3 Blue Devil's lead.
In the second quarter, Duke's defense stopped Orlovsky on a fourth-and-inches at the UConn 41-yard line. That led to a 36-yard field goal from Brooks, his second of the game.
Duke's senior defensive end Philip Alexander broke his left leg during Tally's interception return, and is expected to be lost for most of the season.