I took a look at the code used by the iThemes Security plugin (free version) to handle this. It uses the same logic that I suggested above: a filter with a search/replace on the fly. Anyway it looks like it only has effect on post/page content and not on widgets.
Are you really 100% sure that links inserted in standard WP text widgets do change depending on the page protocol? Could you post a link to your site?
Please try the following: edit the file plugins/better-wp-security/modules/free/ssl/class-itsec-ssl.php and add the following line:
add_filter( 'widget_text', array( $this, 'replace_content_urls' ) );
just after:
add_filter( 'the_content', array( $this, 'replace_content_urls' ) );
If that works, I would ask the iThemes staff to add it it to their codebase. It makes sense that this is made on their side, since it’s generic and works on all widgets that uses the widget_text hook (which is standard).