Ulster were outplayed for much of this encounter and gained scant consolation when Craig Gilroy crossed late on for his fifth try in three games.
Scrum half Isaac Boss, who turned in a man-of-the-match performance against his former team, said afterwards: "I was looking forward to coming back to Ravenhill and I'm delighted with the win because Ulster are a very good side.
"They have been going very well recently with lots of good young talent so it was always going to be a tough test.
"It was all about putting in a good performance and I thought that our forwards led the way in that regard. It was a pleasing win and we'll look to improve once more against a good Connacht side this weekend."
The Ravenhill pitch was in ideal condition after 170 volunteers and Ulster Branch staff cleared snow and ice from the playing surface in the 48 hours before kick-off.
Ulster, who were missing some key players due to the IRFU Player Welfare Programme, fell behind early on when O'Brien blitzed his way in under the posts.
Just as a Leinster attack looked to be petering out near the Ulster 22, Boss and Fergus McFadden added some spark before O'Brien showed great pace and power to evade the grasp of Johann Muller and BJ Botha and hand off Pedrie Wannenburg on the way to the whitewash.
Isa Nacewa, who missed an earlier penalty, slotted the conversion and then added the extras to O'Brien's second try on the quarter hour mark.
Ulster's defence was called into question again when Boss found a gap in the 22 and drew the cover before passing for the onrushing O'Brien to complete his brace and establish a 14-0 lead for the visitors.
Brian McLaughlin's men got on the scoreboard in the 22nd minute after Muller, Dan Tuohy and Nevin Spence had made headway. Niall O'Connor ensured some reward for Ulster's first visit to the Leinster 22 by landing a much-needed penalty.
Nacewa replied with his first penalty of the game, which O'Connor replied to after good work from young winger Gilroy and centre Spence.
But Leinster were able to take a 20-6 buffer into the break after Nacewa converted the first of two penalty attempts in the final three minutes of the half.
Turning around with the wind at their backs, Ulster enjoyed more possession at the start of the second half but Leinster's solid defence gave them precious little space to manoeuvre in.
The gap was widened when Nacewa picked off his third successful penalty, in the 51st minute, and Leinster sensed more scores after Ulster's Adam D'Arcy was penalised for a deliberate knock on.
The ball was dispatched to touch, Leinster won the lineout and although Ulster held a series of forward drives at bay, near their posts, the visitors switched the point of attack and some pinpoint passes ended with Horgan touching down in the right corner for his 35th league try.
Nacewa tagged on a terrific conversion to push the lead out to 30-6 and Ulster's four-match winning streak in all competitions was most certainly at an end.
The hosts did raise their game in the final quarter, with fresh legs off the bench adding some zip to their attack.
As Leinster tired somewhat, Ulster's renewed efforts resulted in a well-worked try for teenager Gilroy. Tuohy and D'Arcy were involved some neat interplay along the right wing and Gilroy was on hand to finish off in the corner.
O'Connor did well to add the extras before being called ashore, with Paul Marshall coming on at scrum half and Ruan Pienaar getting some game-time at out-half.
Ulster, who have a game in hand on Leinster, pressed for a further score as they tried to salvage something from this game, but Joe Schmidt's side stood firm to claim a winning margin of 17 points.
It was an impressive post-Christmas display by Leinster, who are back in the play-off zone ahead of the visit of Connacht to the RDS on New Year's Day.
Ulster, who have yet to beat one of their fellow provinces this season, make the trip to Munster on Saturday and coach McLaughlin will demand a much-improved display from his players.
"We were guilty of schoolboy errors, that performance just wasn't acceptable. It was a very poor performance by us," he said afterwards.
"We tried to play a little bit of rugby (in the last 20 minutes) but by that stage the game was over. The game was won and lost in the first 20 minutes."
|Ulster Rugby Score Card|
|Leinster Rugby Score Card|