The missile hit the front left of the plane causing other parts break off, it said in a final report into the July 2014 disaster, which killed 298 people.
The West and Ukraine say Russian-backed rebels brought down the Boeing 777, but Russia blames Ukrainian forces.
The report does not say who fired the missile, but says airspace over eastern Ukraine should have been closed.
The plane – flying from Amsterdam to Kuala Lumpur – crashed at the height of the conflict between government troops and the pro-Russian separatists.
Among the victims were 196 Dutch nationals and 10 Britons.
Investigators could not determine at which point the occupants died, the report says, adding that it was not able to rule out possibility of some remaining conscious for some time during the one-and-a-half minutes it took for the plane to crash.
The Dutch Safety Board presented its findings first to the victims’ relatives before briefing reporters at the Gilze-Rijen military base in the Netherlands.
The board showed parts of the aircraft that brought back from the rebel-held Donetsk region and reconstructed.
Dutch Safety Board President Djibbe Joustra said the impact pattern on the plane showed a missile was responsible – not a meteor, air-to-air missile or internal explosion.
He said paint had been found on metal fragments within the plane that matched with missile fragments on the ground.
The evidence pointed to a 9N314M warhead, which can be fitted to a 9M38M1 missile launched by the Buk surface-to-air missile system, the report found.
Mr Joustra said there was sufficient reason to have closed off Ukrainian airspace to commercial traffic but Ukraine did not do that – and on the day of the crash, 160 flights flew over the area in question.
The board does not have the authority to apportion blame, under the rules governing international crash investigations.
A separate Dutch-led criminal investigation is expected to publish its findings in several months’ time.
Mr Joustra suggested that the aircraft is most likely to have been brought down by a Russian-made Buk surface-to-air missile – which experts say both Russian and Ukrainian armies possess.
The government in Ukraine and several Western officials have said the missile was brought from Russia and launched from the rebel-held part of Ukraine.
Earlier on Tuesday, Russian officials from Almaz-Antey – the state firm which manufactures Buk missiles – once again rejected those accusations.
During a presentation timed to pre-empt the Dutch report, officials said the evidence suggested the plane was shot down by a surface-to-air Buk missile fired by Ukrainian forces.
Using video footage of their own mock-up of shrapnel hitting the fuselage of an aircraft, the officials said trajectory evidence showed the missile had been fired from Ukrainian-controlled territory. They argued the missile used was a decades-old model no longer in use in the Russian arsenal.
Russia says Dutch investigators have not taken account of its findings.
In July, Russia vetoed a draft resolution at the UN Security Council to set up an international tribunal into the MH17 air disaster.
President Vladimir Putin said at the time the establishment of such a tribunal would be “premature” and “counterproductive”.