Tvrđava Herceg Stjepana ili Stari grad Ljubuški je srednjovjekovna utvrda na području grada Ljubuškog.
Sagrađena je na čvrstom, krševitom položaju, na nadmorskoj visini od 396 m.
Tvrđava se veže uz hercega Stjepana Vukčića Kosaču, a spominje se 1452. godine u vezi s borbama između hercega Stjepana i njegovih sinova, knezova Vladislava i Vlatka.
Spomenute godine knez Vladislav prelazi na stranu Dubrovačke Republike u ratu protiv svog oca. Herceg Stjepan se sklonio u tvrđavu u Ljubuškom. Te godine Vladislav je pokušao ocu preoteti grad Ljubuški, ali ga nije uspio osvojiti.
Godine 1463. Osmanlije su prvi put osvojile Ljubuški. Držali su ga samo mjesec dana (lipanj-srpanj) jer su se morali povući zbog nedovoljne opskrbe vojske, pa je knez Vlatko brzo vratio grad pod svoju vlast.
Između 1468. i 1477. godine Osmanlije su definitivno osvojile Ljubuški. Već 1477. godine bila je pogranična tvrđava sa jakom posadom i pripadala je Drinskom kadiluku.
U ugovoru između Osmanskog Carstva i Ugarske iz 1503. godine Ljubuški se spominje kao jedan od pograničnih gradova koji ostaje pod osmanskom vlašću, prenosi Naš Ljubuški.
Tvrđava se sastoji iz dva dijela. Prvo utvrđenje nastalo je u vrijeme srednjovjekovne bosanske države. Unutar zidina vidljivi su posljednji ostaci raznih građevina: stražarnice, žitnice, pekare, barutane, a identificirane su i 4 cisterne od kojih se tri danas mogu prepoznati na terenu.
Otomanski dio tvrđave izgrađen je oko srednjovjekovne utvrde, koja je potom postala jezgrom velike tvrđave, poput akropole, opasane zidinama sa svih strana.
Oko 250 m sjeverozapadno od ulaza u tvrđavu nalaze se ruševine džamije koju je vjerovatno sagradio Nesuhaga Vučjaković sredinom 16. stoljeća. Ova tvrđava je 2003. godine proglašena nacionalnim spomenikom Bosne i Hercegovine.
Uz ovaj grad veže se i legenda koja kaže da je jednom davno Herceg Stjepan, ne mogavši odoljeti ljepoti mlade Venecijanke, buduće zaručnice svog sina, poznate po neobuzdanoj naravi, oteo sinu lijepu mletačku nevjestu, koju je ovaj brodom doveo iz Venecije, a koji je zatim pozvao Osmanlije i zaratio s njegovim ocem.
Tako je Kosač ukrao mladu na moru i odveo je u svoju tvrđavu u Ljubuškom. Odatle i naziv grada. Mjesto gdje je Kosača volio.