Start by providing an estimate of the amount of time it will take you to provide him an estimate based on the overall scope of the project. Too often programmers don't afford themselves enough time to account for all the necessary tasks before they commit themselves to a date.
High-level Estimating:
1. List all of the major tasks you believe are involved in the project.
2. If you lack enough information to start the task, estimate in calendar days when you anticipate getting the information.
3. Give your ballpark estimate to each task rather than the project as a whole. It's easier to accurately estimate individual tasks.
4. Assign a risk factor to each task based on the information provided, your experience in that particular area, and the likelihood of that task changing before project completion.
5. Multiply your ballpark for each task by it's risk factor.
6. Blackout 15% of your day for administrative activities, such as meetings, email, doctor visits, etc.
7. Blackout holidays and vacations.
8. List the tasks and milestones on a Gantt chart or spreadsheet, accompanied by your list of qualifying prerequisites and assumptions - highlight those tasks that require more information from the business user. They often are the main culprit for delaying a project by failing to give you the information you need to start coding.
When your boss balks at your researched estimate (oh yes, he will!) Ask him which tasks he wants you to eliminate from the project to shorten the timeline. Often, a project can be "phased in" by prioritizing the blue sky requirements into a more manageable project.
Also mention that the date could move in if you get requirements sooner than you estimated... that puts a fire under the user to hold up their end of the bargain.
Good Luck!