From: Mark Lodato <lodatom@gmail.com>
To: git@vger.kernel.org
Subject: git with https and client cert asks for password repeatedly
Date: Tue, 24 Feb 2009 22:11:40 -0500 [thread overview]
Message-ID: <ca433830902241911x10b08a4fg8e790000a5cf9f3b@mail.gmail.com> (raw)
First off, I am fairly new to git, so let me apologize in advance if I
suggest anything stupid.
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:
> git push origin master
Enter PEM pass phrase:
Enter PEM pass phrase:
Fetching remote heads...
refs/
refs/tags/
refs/heads/
updating 'refs/heads/master'
from 1df865db590b4a7d4991c13053437ac90b2780e4
to 05e856a6a5ce9b05a5a7d10cb5d10010467eea72
Enter PEM pass phrase:
Enter PEM pass phrase:
Enter PEM pass phrase:
Enter PEM pass phrase:
Enter PEM pass phrase:
Enter PEM pass phrase:
Enter PEM pass phrase:
Enter PEM pass phrase:
Enter PEM pass phrase:
Enter PEM pass phrase:
Enter PEM pass phrase:
Enter PEM pass phrase:
Enter PEM pass phrase:
sending 12 objects
Enter PEM pass phrase:
Enter PEM pass phrase:
Enter PEM pass phrase:
Enter PEM pass phrase:
Enter PEM pass phrase:
done
Updating remote server info
To make matters worse, when you try to CTRL-C from the "Enter PEM pass
phrase" prompt, it just re-prompts you! If you want to see this in
action, set up a webdav server on https://localhost with a copy of
git.git and try cloning it with a password-protected client
certificate.
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. Ideally, I would just type
my password once per invocation and git would remember it. (This is
how svn works.)
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?
I saw a thread from Jan '08 about this, but it never said *why*
HTTP_MULTI is required, only that the push doesn't work without it.
It doesn't appear to me that git uses concurrent connections in any
useful way, so I don't know why having a single connection would not
work.
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?
--
Mark Lodato
next reply other threads:[~2009-02-25 3:13 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-02-25 3:11 Mark Lodato [this message]
2009-02-25 8:24 ` git with https and client cert asks for password repeatedly Daniel Stenberg
2009-02-25 21:42 ` Josef Wolf
2009-02-26 10:17 ` Johannes Schindelin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ca433830902241911x10b08a4fg8e790000a5cf9f3b@mail.gmail.com \
--to=lodatom@gmail.com \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).