史可法因祖上的荣誉得以世袭锦衣卫百户。传说史可法的母亲梦见文天祥来到他的屋里而受孕怀胎。万历三十年(1602年),史可法生于河南祥符县(今开封),因为孝顺被乡里人所知。
史可法早年以孝闻名于乡,崇祯元年(1628年)中进士,出任西安府推官,后迁户部主事、员外郎、郎中。
崇祯八年(1635年),史可法迁升为右参议,负责镇守池州、太平两地。同年秋,总理侍郎卢象升大举攻打农民军,史可法被改封副使,巡行安庆、池州等地,监江北军队。黄梅农民军攻掠宿松、潜山、太湖等地,史可法率军追击潜山天堂寨的农民军。
崇祯十一年(1638年)夏,史可法因为长时间没有平定叛乱而获罪,朝廷令他戴罪立功。
崇祯十二年(1639年),史可法因为岳父的去世而离职。丧满后,史可法被用为户部右侍郎兼右佥都御史,接替朱大典总管漕运,巡抚凤阳、淮安、扬州等地。
崇祯十七年(1644年),史可法听闻李自成进攻北京,率军进京勤王。军队抵达达浦口时,传来北京失陷、崇祯帝朱由检自缢的消息。史可法为朱由检发丧,收到了张慎言、吕大器、姜曰广等人的文书,拥立朱常淓为新君。但凤阳总督马士英暗地与阮大铖商议,主张立福王朱由崧,史可法告诉他们朱由崧的七个缺点,但马士英已经与黄得功、刘良佐、刘泽清、高杰发兵护送朱由崧到仪真,于是史可法等人前往迎接朱由崧。
弘光元年(清顺治二年,1645年),河南总兵许定国私通清朝,巡按陈潜夫和参政分巡睢阳道袁枢请四镇之一的高杰北上。正月十二日夜,高杰在睢州故袁可立府第内被许定国害死,清军乘机南下。史可法闻讯长叹无法克复中原。他伤心备至,亲自赶往高军营中做善后工作,立高杰子为兴平世子,外甥李本深为提督,胡茂祯为阁标大厅(即中军),李成栋为徐州总兵。高杰妻邢氏耽心儿子幼小,不能压众,她知道史可法没有儿子,提出让儿子拜史可法为义父。但史可法却因为高部是流贼出身,坚决拒绝,命高杰子拜提督江北兵马粮饷太监高起潜为义父。
二月,史可法从徐州回到白洋口。阎尔梅当时正在史可法幕中,劝他渡河复山东,不听;劝之西征复河南,又不听;劝之稍留徐州为河北望,又不听”,一以退保扬州为上策。
同年四月,左良玉率数十万兵力,由武汉举兵东下,要清君侧,“除马阮”,马士英竟命史可法尽撤江防之兵以防左良玉。史可法只得兼程入援,抵燕子矶,以致淮防空虚。左良玉为黄得功所败,呕血而死,子左梦庚率全军投降清朝;史可法奉命北返,此时盱眙降清,泗州城陷。史可法遂至扬州,继续抵抗清军的进攻。
弘光元年(清顺治二年,1645年)四月,多铎兵围扬州,史可法传檄诸镇发兵援救,刘泽清北遁淮安降清,仅刘肇基等少数兵至,防守见绌。此时多尔衮劝降,史可法致《复多尔衮书》拒绝投降。四月十七日,清军进至距离扬州二十里处下营,次日兵临城下。史可法“檄各镇援兵,无一至者”。
四月十九日,高杰部提督李本深率领总兵杨承祖等向清豫亲王多铎投降,广昌伯刘良佐也率部投降;四二十一日,总兵张天禄、张天福带领部下兵马投降,随即奉多铎之命于二十四日参加攻取扬州。扬州城里只有总兵刘肇基部和何刚为首的忠贯营,兵力相当薄弱。
由于城墙高峻,清军的攻城大炮还没有运到,多铎派人招降史可法、淮扬总督卫胤文,遭到严词拒绝。四月二十一日,甘肃镇总兵李栖凤和监军道高歧凤带领部下兵马四千入城,两人的意思却是劫持史可法,以扬州城投降清朝。
史可法毅然说道:“这是我殉国的地方,你们打算做什么,如何想要富贵,请你们自便。”李栖凤、高歧凤见无机可乘,于四月二十二日率领所部并勾结城内四川将领胡尚友、韩尚良一道出门降清。史可法以倘若阻止他们出城投降恐生内变为理由,听之任之,不加禁止。
四月二十四日,清军以红衣大炮攻城。入夜扬州城破,史可法自刎,被众将拦住。众人拥下城楼,大呼曰:“我史督师也﹗”被擒住后,史可法拒绝投降而被杀。
清军占领扬州以后,多铎以不听招降为由,下令屠杀扬州百姓。屠杀延续了十天,死亡逾八十万人,史称“扬州十日”。尸骨堆积如山,史可法遗体难以辨认,不知下落,一年后,其义子史德威以袍笏招魂,将其衣冠葬于扬州城天甯门外梅花岭。后来全祖望曾写《梅花岭记》描述此事。