21

When I try to $ brew update I'm getting the error:

error: Protocol https not supported or disabled in libcurl while accessing https://github.com/mxcl/homebrew/info/refs?service=git-upload-pack

However, when I $ curl --version, I see:

curl 7.21.4 (x86_64-apple-darwin12.2.0) libcurl/7.21.4 OpenSSL/0.9.8y zlib/1.2.5 libidn/1.20
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smtp smtps telnet tftp 
Features: IDN IPv6 Largefile NTLM SSL libz 

Unless I'm missing something, that looks good to me. Notice that https is listed in the protocols list.

$ which curl yields a suspicious response:

/usr/local/php5/bin/curl

Hmmmmm...maybe brew is using a different curl (like the one at /usr/bin/curl). Let's see:

$ /usr/bin/curl --version

curl 7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 OpenSSL/0.9.8y zlib/1.2.5
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smtp smtps telnet tftp 
Features: AsynchDNS GSS-Negotiate IPv6 Largefile NTLM NTLM_WB SSL libz 

Okay, it's obviously a different install of curl, but it's also listing https in the protocols list, and has the OpenSSL info there too.

BTW: I get the same error if I try to use an https URL with any git repo on my machine.

Questions:

  1. How can I determine the path to the curl that brew is using?
  2. How do I enable support for https in libcurl?

UPDATE: I was able to determine the path to libcurl.4.dylib that git (and brew) are using by following deltheil's method below. The path is:

/usr/lib/libcurl.4.dylib (compatibility version 6.0.0, current version 6.1.0)

So I tried this:

$ brew install curl --with-libssh2

Luckily curl is available at a non-SSL URI, so it actually did insstall. It didn't symlink into /usr/local, but that's fine with me (I think). So I did this:

$ cd /usr/lib
$ mv libcurl.4.dylib libcurl.4.dylib.bk
$ ln -s /usr/local/Cellar/curl/7.30.0/lib/libcurl.4.dylib libcurl.4.dylib
$ brew update

But it's still throwing me this error:

error: Protocol https not supported or disabled in libcurl while accessing https://github.com/mxcl/homebrew/info/refs?service=git-upload-pack

So now the question exclusively becomes: How do I enable support for https in libcurl?

Ben Harold
  • 6,242
  • 6
  • 47
  • 71

3 Answers3

6

How can I determine the path to the curl that brew is using?

Homebrew uses /usr/bin/curl, i.e the version that ships with Mac OS X, as you can see here.

That being said, and as you precise, your problem is probably related to the version of libcurl that is linked with git and used for http:// and https://.

Perform a which git to determine which is the version you are being used (mine is installed under /usr/local).

Then scan the shared libraries used as follow:

$ otool -L /usr/local/git/libexec/git-core/git-http-push | grep curl
/usr/lib/libcurl.4.dylib

Replace /usr/local/ with the install directory that corresponds to your git.

Since the libcurl version used by your git exec lacks of HTTPS support, this will tell you what is this version and where it is installed.

deltheil
  • 15,496
  • 2
  • 44
  • 64
  • Thanks @deltheil, you got me halfway there. I've updated the question with current progress. – Ben Harold Sep 27 '13 at 22:35
  • There's definitely something wrong somewhere since `git` is properly linked against system libcurl, which has support for https. That being said you should **never, ever** modify your system files under `/usr/bin`, `/usr/lib`, et al. I recommend you to run a `brew doctor` and check this [Github HTTPS cloning errors](https://help.github.com/articles/https-cloning-errors) page. – deltheil Sep 28 '13 at 10:44
  • Alternatively you may want to properly install `git` via Homebrew with the `with-brewed-curl` option so that `git` uses `curl` from brew which depends on `darwinssl` for SSL support. – deltheil Sep 28 '13 at 10:51
  • I ran `brew doctor` and it listed a bunch of files that were installed but not `brewed` or whatever...I deleted all of them except for some PHP5 config files that I know aren't any trouble, and it worked! Thanks so much for your help. – Ben Harold Sep 30 '13 at 17:45
2

This worked for me:

Re-install curl and install it using the following commands (after unpacked):

$ ./configure --with-darwinssl    
$ make    
$ make test    
$ sudo make install

When you run the command "curl --version" you'll notice that the https protocol is now present under "protocols".

A helpful site if you run into curl problems: https://curl.haxx.se/docs/install.html

divij_o
  • 125
  • 8
1

I had this issue on OSX. The issue were duplicate curl and curl.config files inside usr/local/bin that conflicted the same two files in usr/bin. I deleted the first set in the local/bin and Terminal worked after that.

jsanabria
  • 451
  • 6
  • 8