672년 신라와 당은 황해도 서흥 일대에서 충돌했다. 앞서 당군은 평양으로 남하하여 진영을 구축한 후, 황해도 일대를 공격하기 위한 준비에 착수하였다. 672년 8월 당군은 한시성(韓始城)과 마읍성(馬邑城)을 공격하여 점령하고 계속 남하하였다. 석문(石門: 황해도 서흥군 서흥면)에서 신라군이 당군과 싸워 크게 패하였으며, 장수 7명이 사망하였다. 석문전투 이후 신라는 전략을 방어로 전환하고, 전국에 대대적인 축성작업을 진행하였다.
670년 3월 신라의 선제공격으로 나당전쟁이 본격화되었다. 신라군의 설오유(薛烏儒)와 고구려부흥군의 고연무(高延武)가 각각 1만씩 거느리고 압록강을 건너 요동의 오골성(烏骨城: 중국 요령성 단동시)을 공격하였다. 이에 당은 고간(高侃)을 동주도행군총관(東州道行軍摠管)으로, 이근행(李謹行)을 연산도행군총관(燕山道行軍摠管)으로 임명하여 신라를 공격케 하였다. 고간과 이근행이 이끄는 당군은 4만 명으로 알려져 있으며, 이들은 671년에서 672년 사이 황해도로 남하하여 평양에 주둔하였다.
672년 8월 당군은 한시성과 마읍성을 공격하여 점령하고 남하하였다. 당군은 백수성(白水城)에서 500보쯤 떨어진 곳까지 남하하여 군영을 설치하였다. 신라군과 고구려부흥군이 당군을 공격하여 수천명을 목베었다. 당군이 패해 달아나자 석문까지 쫓아가 싸웠는데, 신라군이 크게 패하였다. 이때 신라군의 대아찬 효천(曉川), 사찬 의문(義文)과 산세(山世), 아찬 능신(能申)과 두선(豆善), 일길찬 안나함(安那含)과 양신(良臣) 등이 사망하였다. 석문전투 당시 신라의 장창당(長槍幢)만이 따로 진을 치고 있다가 당군 3천명을 사로잡는 전과를 올렸다. 이에 장창당의 전과를 부러워한 여러 부대들이 분산하여 주둔하기로 하였다. 신라군이 분산하여 제대로 진영을 편성하지 못한 틈을 타 당군의 공격이 이루어졌고, 신라군은 크게 패하였다.
석문전투 이후 9월에 신라는 당나라에 사죄사를 파견하였다. 급찬 원천(原川)과 나마 변산(邊山)과 함께, 억류중이던 병선낭장(兵船郎將) 겸이대후(鉗耳大候), 내주사마(萊州司馬) 왕예(王藝), 본열주장사(本烈州長史) 왕익(王益), 웅주도독부사마(熊州都督府司馬) 예군(禰軍), 증산사마(曾山司馬) 법총(法聰) 등을 당나라로 보냈다. 신라가 억류중이던 이들은 당군과 웅진도독부 관련자들이었다. 또한 신라는 사죄문과 금, 은, 구리, 바늘, 우왕, 포목 등 막대한 진공품을 바쳤다. 이 해 신라는 곡식이 귀하고 기근이 들었다고 한다.
한편으로 신라는 전략을 방어로 전환시키고, 대대적인 축성작업을 진행하였다. 672년에 주장성[晝長城 : 경기도 광주시 남한산성면]을 쌓았고, 673년 2월 서형산성(西兄山城)을 증축하였고, 8월에 사열산성(沙熱山城)을 증축하였다. 이어 9월에 국원성(國原城), 북형산성(北兄山城), 소문성(召文城), 이산성(耳山城), 주양성(走壤城), 주잠성(主岑城), 만흥사산성(萬興寺山城), 골쟁현성(骨爭峴城)을 쌓았다. 신라는 대규모 축성을 통해 당군의 침입을 축차적으로 방어할 수 있는 방어체계를 수립하였다.
『삼국사기(三國史記)』 김유신전에는 석문전투 패배 이후 문무왕과 김유신의 대화가 남아 있다. 김유신은 “당나라 사람들의 모책을 헤아릴 수 없으니 장졸들로 하여금 각 요충지를 지키게 해야 합니다”라고 하였다. 석문전투는 신라의 중앙군이 대거 참가하였으나 당군에게 크게 패함으로써 신라의 전략을 전환시키는 계기가 되었다.