git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: git with https and client cert asks for password repeatedly

From
JWJosef Wolf <jw@raven.inka.de>
Date
Feb 25, 2009, 21:42 UTC
Message-ID
<20090225214224.GB4573@raven.wolf.lan>
In-Reply-To
<ca433830902241911x10b08a4fg8e790000a5cf9f3b@mail.gmail.com>
On Tue, Feb 24, 2009 at 10:11:40PM -0500, Mark Lodato wrote:
> When fetching or pushing over https:// with a client certificate
> (http.sslCert / http.sslKey), git asks for a password for every single
> requested file.  For example, here I push three commits with a couple
> changed files each:
[ ... ]
> This problem makes client-side certificates unusable with git.  A
> possible workaround is to leave the key unencrypted, but this is
> usually unacceptable for security reasons.

For the (pretty much standard) Basic authentication over https, it is even worse: you have to put your password in plain text into .netrc :-( Check out http://marc.info/?l=git&m=122426078301793&w=2 if you have a couple of minutes left.

> Ideally, I would just type
> my password once per invocation and git would remember it.  (This is
> how svn works.)
Yeah, that would be great!
Show 9 quoted lines
> I think the root problem is that git creates a completely new http(s)
> connection for every request, rather than using one persistent
> connection.  Using a persistent connection would theoretically speed
> up the transfers, in addition to fixing the password prompt issue.
> I'm pretty sure that calling `curl_easy_cleanup()' after every request
> is causing this behavior; I don't think this is necessary.
> 
> I tried fixing this myself, but the http/curl code is pretty
> confusing.  Just wondering - why is HTTP_MULTI required for http-push?

The integration of curl into git looks somewhat strange to me, also. It seems to implement some sort of request-queue on top of curl-multi and falls back to re-implement some curl-multi functionality in the case when only curl-easy is available. Or something like that. I have not looked too much into the details, and have already forgotten what I saw there.

Instead, I looked into curl-lib to implement some sort of credential caching. The idea was to implement something like get_basic_credentials() in the LWP::UserAgent perl module.

Once such a retrieval callback/cache would be implemented in curl, it would be pretty easy to make use of it from git without messing/breaking too much with the existing code.

So I went to the curl-library list. Please feel free to read the discussion on http://curl.haxx.se/mail/lib-2008-10/index.html#286

Check out http://curl.haxx.se/mail/lib-2008-11/index.html#38 for a first draft of the change I suggested.

Unfortunately, I got stuck implementing the regression tests for this change. Then I got short on time to proceed the work on this topic. Check out http://curl.haxx.se/mail/lib-2008-11/index.html#51 for the last state of affairs I posted. Once the regression tests are implemented, implementing the remaining functionality would be pretty much straight forward. But currently, I have no clue when I will get around to continue working on that.

> Finally, is there interest in refactoring the http code to make it a
> little cleaner?  That is, make a wrapper library around curl so that
> you can just call GET or POST or whatever and not worry about how to
> invoke curl?

As I mentioned above, I figured that implementing the callback method in curl-lib would probably be easier than understanding the usage of curl within git. So I'd say refactoring would be an improvement. But I bet the git gurus will flame me for saying that =:-S

Previous: Daniel StenbergNext: Johannes Schindelin
Message 3 of 4 in “git with https and client cert asks for password repeatedly”
  1. Mark LodatoFeb 25, 2009
  2. Daniel StenbergFeb 25, 2009
  3. Josef WolfFeb 25, 2009
  4. Johannes SchindelinFeb 26, 2009

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.