There isn't a direct penalty for having rel="canonical" tags on every page, no, as long as you are correctly utilizing them (i.e. don't set the href of the tag to an invalid or non-existent URL). If there is even the possibility of duplicate content on your website, it is best to use canonical tags.
For websites serving straight HTML files, both http://www.example.com/index.html and http://www.example.com/ likely serve the same content.
If you use a framework like ASP.NET MVC, it would by default return duplicate content for both http://www.example.com/ and http://www.example.com/Home/Index.
Choose one or the other and set your canonical tag to that:
(note: the trailing slash is optional - just be consistent with including it or not)