楚州(今江蘇淮安)窮苦書生竇天章家境貧寒,終日苦讀以求取功名。一日,家中因無米下鍋,他借了蔡婆婆二十兩紋銀,第二年連本帶息合為四十兩,竇天章無力償還。竇天章有一七歲的女兒,名叫端雲,生得俏麗可愛,蔡婆婆很喜歡她。竇天章為了還債和籌措上京應試的旅費,隻好同意將女兒端雲送給蔡婆婆做童養媳。

竇天章走後,蔡婆婆待端雲也如親生女兒一般,並改了小名,起名為竇娥。竇娥十七歲時與蔡婆婆的兒子結婚,可惜不到兩年,丈夫得病去世,竇娥成了寡婦。婆媳倆從此相依為命。竇娥的賢惠孝順在鄰居間傳為美談。

一日,蔡婆婆向城南開藥店的賽盧醫要債。這賽盧醫乃江湖庸醫,一直靠行騙為生。賽盧正要對蔡婆婆下毒手時,被路過的張驢兒父子撞見。蔡婆婆被救下,賽盧醫逃走。這張驢兒乃楚州的流氓,當他得知蔡婆婆家隻有她們婆媳二人時,便要她們婆媳配與他們父子。蔡婆婆沒有同意,張驢兒便要用繩索勒死蔡婆婆,以相威脅。為了保全性命,蔡婆婆隻得將張驢兒父子帶回了家。竇娥得知情況後,反對婆婆的承諾,堅決不同意嫁給張驢兒。而張驢兒見竇娥年輕貌美,便下了決心一定要得到竇娥。

一日,蔡婆婆生病,張驢兒以把柄在手威脅賣藥的賽盧醫,賣給他毒藥,企圖用毒藥毒死蔡婆婆,使竇娥失去了依靠,答應嫁給他。哪知恰好蔡婆婆作嘔難受,讓張驢兒的父親吃了那藥。老頭兒當場,便一命嗚呼了。張驢兒當即誣賴是竇娥毒死其父,並以竇娥答應嫁給他作為不告官的條件。竇娥認為自己是清白的,寧願見官,也不屈服張驢兒的要挾。

沒有想到的是,楚州太守桃杌竟是個昏官,他隻聽張驢兒巧辯之詞,認定竇娥有謀害之罪,對竇娥實行嚴刑逼供,又下令拷打蔡婆婆。竇娥不忍婆婆為她受皮肉之苦,隻好屈招,因而被定為死罪,第二天斬首。在押赴刑場的路上,竇娥痛感滿腹冤屈無處申訴,她指天罵地,控訴自己深重的冤情和世道的不公正。她請求監斬官帶她走後街,怕前街的婆婆見了傷心。不料婆婆前來送行,她又再三叮囑婆婆多保重。臨刑時她對天發誓:我死後,一、血濺白練;二、六月降雪;三、三年大旱。果然,這三樁誓願刑後一一應驗,上天也證明了竇娥的冤屈。

竇娥的父親竇天章功成名就做了官,四處打聽竇娥的下落。竇娥托夢給父親,痛訴冤情。竇天章立即替女兒主持公道,此案得到複審,張驢兒巧言難辯。沉冤得雪,張驢兒得到了應有的懲罰,竇娥冤屈終於真相大白。