Three Russians and a Ukrainian have been charged with bringing a missile into the area in eastern Ukraine and with murdering 298 passengers and crew.
The passenger flight was en route from Amsterdam to Kuala Lumpur when it was shot down over conflict-hit Ukraine.
Russia said the accusations against its military were "absolutely threadbare".
International arrest warrants have been issued for the four suspects and a court case will begin in the Netherlands on 9 March 2020.
The Dutch-led joint investigation team (JIT) named the men as Igor Girkin, Sergei Dubinsky and Oleg Pulatov from Russia, as well as Ukrainian Leonid Kharchenko.
The JIT, which is seeking to try the suspects under Dutch law, had previously said it had a "long list" of persons of interest and appealed again for witnesses as the investigation continued.
Who are the suspects?
The most prominent of the four is Igor Girkin (also known as Strelkov), who prosecutors say is a former colonel in Russia's FSB intelligence service. He was given the minister of defence title in the rebel-held eastern Ukrainian city of Donetsk.
He is believed to be the highest military officer in the area who was in direct contact with the Russian Federation. In a statement Mr Girkin said: "I can only say that militia did not shoot down the Boeing."
The others charged are:
Sergei Dubinsky (known as Khmury), who prosecutors say was employed by Russia's GRU military intelligence agency, was a deputy of Mr Girkin and in regular contact with Russia
Oleg Pulatov, known as Giurza, who the JIT says was a former soldier of GRU special forces and deputy head of the intelligence service in Donetsk
Ukrainian national Leonid Kharchenko, who has no military background but led a combat unit as a commander in eastern Ukraine, according to prosecutors
"These suspects are seen to have played an important role in the death of 298 innocent civilians", said Dutch chief prosecutor Fred Westerbeke.
"Although they did not push the button themselves, we suspect them of close co-operation to get the [missile launcher] where it was, with the aim to shoot down an aeroplane."
Investigators, he added, had "evidence showing that Russia provided the missile launcher".
The investigative website Bellingcat has named 12 people it accuses of being involved in transporting the missile used to down MH17, including the four charged by the JIT.
What is known about flight MH17?
The passenger jet left Amsterdam's Schiphol Airport at 10:15 GMT on 17 July 2014 and was due to arrive at Kuala Lumpur in Malaysia the following day.
A few hours after take-off, the plane lost contact with air traffic control about 50km (30 miles) from the Russia-Ukraine border.
At the time, an armed conflict was raging on the ground in eastern Ukraine between Russian-backed separatists and Ukrainian government forces, and several government military aircraft had been downed in the previous weeks, while government air strikes were being carried out on rebel-held areas.
The plane crashed in the Donetsk area, in territory controlled by separatists. Parts of the wreckage were found distributed over an area of about 50 sq km (19 square miles).
In October 2015, the Dutch Safety Board concluded the plane had been hit by a Buk missile, causing it to break apart in mid-air.
The JIT - which includes officials from the Netherlands, Australia, Belgium, Malaysia and Ukraine - concluded in May 2018 that the missile system belonged to the 53rd Anti-Aircraft Missile brigade, based in the western Russian city of Kursk. It produced evidence that it said proved how the missile system had reached eastern Ukraine.
Russia responded by denying any of its anti-aircraft missile systems had ever crossed the Ukrainian border.
Australia and the Netherlands have both officially held Russia responsible for the crash.
Will the suspects ever face trial?
US Secretary of State Mike Pompeo called upon Russia to "ensure that any indicted individuals currently in Russia face justice".
But Russia's foreign ministry said in a statement that it rejected the findings of the JIT which were "aimed at discrediting the Russian Federation in the eyes of the international community".
Unnamed Dutch officials have told news agencies that Russia refused to co-operate with the investigation but the foreign ministry denied this, saying Russia had always been interested in establishing the truth.
Russia accused the JIT of using dubious "sources of information", including evidence "fabricated" by Ukraine, while ignoring evidence offered by Russia.
In July 2015, it vetoed a UN Security Council resolution that sought to set up a special tribunal to prosecute those responsible.
Under Article 61 of Russia's constitution, no Russian citizen can be extradited to another state.
A former rebel official in Donetsk, Andrei Purgin, said it was "absurd" to accuse the separatists of involvement in downing the plane, Russia's Interfax news agency reports.
Asked by AFP news agency, Ukrainian security services said they had "no information" on Leonid Kharchenko's whereabouts or whether he was even still alive.
Who has welcomed the charges?
Ukrainian President Volodymyr Zelensky welcomed the Dutch-led inquiry's conclusions, Reuters news agency reports. He said he hoped "those who are guilty of this brazen murder of innocent children, woman and men will be put in the dock".
UK Foreign Secretary Jeremy Hunt said Russia "must co-operate fully with the prosecution and provide any assistance it requests" in accordance with UN Security Council resolution 2166, which was passed in response to the downing of MH17.
"The international community stands together against the impunity of those responsible for the despicable murder of 298 innocent people," he added.
Nato chief Jens Stoltenberg said the bringing of charges marked an "important milestone in the efforts to uncover the full truth and ensure that justice is done".