A workflow can most definitely be used for this purpose. You can setup a workflow to start on item creation and update. For the workflow use the following:
Calculate Current Item:Due Date minus 86400 (Output to Variable: calc)
then Pause until Variable: calc
then Email these users
When entering in the Current Item:Due Date field, select it as Number of Seconds since 00:00:00 1/1/1900
This should create a date 24 hours (60 seconds * 60 minutes * 24 hours = 86400) and store it in a variable calc that the workflow will stop until. Once it hits that date, it should send out the email.