Opposite of --insecure is what?

Mads Kiilerich mads at kiilerich.com
Fri Feb 4 11:26:30 UTC 2011


On 02/04/2011 10:09 AM, Jason Harris wrote:
> Ok in making MacHg work with certificates for https:// and fingerprints and
> stuff the following issue has come up... Ironically I now have almost the
> opposite question to the ones I previously asked. How do I make the operation
> always fail if there is no verifiable certificate or fingerprint?

For now the way to do that is to specify a web.cacerts file. It can't be 
empty, but you can generate a random self-signed certificate and throw 
away the key.

It would make sense if Mercurial by default aborted instead of issuing a 
warning (unless --insecure was specified). Such a change would in my 
opinion have been too invasive for a stable bugfix release - that is one 
of the reasons we just give a warning (or a number of them ...).

The packaging guideline has however already been changed to recommend 
shipping Mercurial with web.cacerts configured and the windows 
installers already does that. That effectively changed the default.

Developers: Should we change the insecure warning to an abort in 1.8? 
With fallback to insecure+warning if web.cacerts=! ?

> But if I set up web.cacerts then things fail outright when connecting to a
> server with a self-signed certificate, but no fingerprint info is printed. Eg
>
> [Bolt:/Development/MacHgDev/MacHgDH] MacHgDH 2211(2211) ⌘ hg pull https://***@jasonfharris.com/hg/MacHg
> abort: error: _ssl.c:480: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
>
> (Note this is a scary error and really what has happened is that the self-signed
> certificate was unknown to Mercurial. It wasn't that it was trying to spoof
> something... The message shouldn't cry wolf. Maybe the message should be a
> little lighter for this case? (I gather from the code that this is coming
> through from a layer below Mercurial...)

Yes, that message is all we get from Python. AFAIK there is no way we 
reliably can give better error messages, and there is no way we can 
retrieve a fingerprint from the failing https session.

Mercurial _could_ create another connection just to retrieve the 
fingerprint. Creating extra network connections in a fatal exception 
handler is however not necessarily a good ide. Instead you can do it by 
connecting again, either insecurely or with an invalid fingerprint - or 
use a python one-liner.

> Why do I need a --authentication strict option?
...

Some brief comments:

"authentication" usually refers to the user authenticating to the 
server, and Mercurial already has an "auth" section for that. This 
should be called something else - I don't know what. Perhaps something 
like "serveridentity".

We would certainly like to see much of what you are asking for.

Mercurial is however constrained by what Python ssl allows.

Another constraint is backward compatibility. Some of our users start 
complaining whenever anything changes.

Mercurial would certainly look differently in this area if we could 
redesign it from scratch without these constraints.

TortoiseHg 1.9 has the same challenges as you have, and Steve has been 
through the same thoughts a month ago and worked closely with the other 
Mercurial developers to create an optimal solution. Check it out and get 
inspiration there.

/Mads




More information about the Mercurial-devel mailing list