Preheat your oven to 325°F (163°C).
Season the veal shanks with salt and pepper on both sides.
Heat olive oil in a large, oven-proof skillet or Dutch oven over medium-high heat. Sear the veal shanks until they are browned on both sides, about 3-4 minutes per side. Remove the shanks and set aside.
In the same pan, add the onion, celery, and carrots. Cook until the vegetables are softened, about 5 minutes. Add the minced garlic and cook for another minute until fragrant.
Pour in the beef broth and white wine (if using), scraping up any browned bits from the bottom of the pan.
Add the diced tomatoes, bay leaves, and thyme. Bring to a simmer.
Return the veal shanks to the pan, spooning some of the liquid and vegetables over them.
Cover the pan with a lid or aluminum foil and transfer to the preheated oven. Braise for about 1.5 to 2 hours, or until the meat is tender and easily pulls away from the bone.
While the osso bucco is cooking, make the gremolata by mixing together lemon zest, chopped parsley, and minced garlic. Set aside.
Once the osso bucco is cooked, remove from the oven and let it rest for a few minutes.
Serve the veal shanks with a generous sprinkle of the gremolata on top.