The five-times European champions, who will face holders Real Madrid in the May 26 final, suffered a nerve-shredding second half as the Italians pinned them back and scored twice late on through Radja Nainggolan.
Nainggolan’s second, which came from a stoppage-time penalty, moved Roma to within one goal of forcing extra time, but Liverpool, who clinched the last of their titles in 2005, held on to reach their eighth European Cup final.
They were far from their devastating attacking best, however, and a nervy defensive display saw them lose their first match in this season’s competition, despite cruising in the first half having twice taken the lead.
Liverpool’s Sadio Mane was their most potent attacking threat and put them ahead after nine minutes, but a bizarre own goal by James Milner levelled for Roma.
A Georginio Wijnaldum header put Liverpool back in front but Roma, who overturned a three-goal deficit to beat Barcelona in the last round, were given renewed belief when Edin Dzeko fired past Loris Karius early in the second half.
Nainggolan drilled in from distance after 86 minutes to make it 3-2 and smashed home from the spot but it was too late for the Italian side who lost the first leg of the semi-final 5-2 in Liverpool.