Pat the veal shanks dry with paper towels.
Season both sides with salt and black pepper.
Dredge the veal shanks in flour, shaking off any excess.
In a large, heavy-bottomed pot or Dutch oven, heat the olive oil over medium-high heat.
Add the veal shanks and brown them on all sides, about 3-4 minutes per side. Remove the shanks and set them aside.
In the same pot, add the chopped onion, carrots, and celery.
Sauté until the vegetables are softened, about 5-7 minutes.
Add the minced garlic and cook for another minute.
Pour in the white wine and bring to a simmer, scraping up any browned bits from the bottom of the pot.
Let the wine reduce by half, about 5 minutes.
Stir in the crushed tomatoes, tomato paste, beef or veal broth, dried thyme, dried rosemary, and bay leaves.
Return the veal shanks to the pot, nestling them into the sauce.
Bring the mixture to a simmer.
Reduce the heat to low, cover the pot, and let it cook gently for about 1.5 to 2 hours, or until the meat is tender and falling off the bone. Turn the shanks occasionally to ensure even cooking.
In a small bowl, combine the lemon zest and chopped fresh parsley.
Transfer the osso buco to serving plates.
Spoon the sauce and vegetables over the top.
Sprinkle with the gremolata for a fresh, zesty finish.
Enjoy your meal!