Sourcetree, Stash, HTTPS, and SSH
Asked by Matt Baker:

I have a new Stash server set up running on HTTPS, have Sourcetree installed, and when I try to clone a repository over SSH, I get this error from Sourcetree:

"This is not a valid source path / URL"

URL is formatted like so: [https://username@git.domain.com/scm/project/repo.git](https://username@gis.domain.com/scm/project/repo.git)

If I use SSH to pull the repo, it works fine.

SSH URL is formatted like so: <ssh://git@git.domain.com:7999/project/repo.git>

Can anyone point me at where to start looking at this problem? Only thing I can think of is something with Apache and mod_proxy not playing nice with Sourcetree.


Answers:
author: Matt Baker
body: The actual problem was I didn't have the full SSL keychain file configured in /etc/apache2/httpd.conf.

Adding this line (and downloading the proper file from my SSL cert provider) fixed this behavior:

SSLCertificateChainFile "/etc/ssl/gd_bundle.crt"


author: JohnB
body: Just in case this help someone else:

I also could not push/pull/clone to our stash server from a rhel client using git over https. The repository was correctly setup and working but I mostly use SSH keys so I never had to push over https before but had no idea why it wasn't working. In my case I'm on a RedHat linux 6.x system using command line git.

If you are using the git 1.7.1 that yum would provide in RHEL/CentOS 6 (I was using 1.7.1-3.el6_4.1) you cannot do git push/pull on https and passing the password either on the command line or in the url (refused to try the abborant .netrc file).

I removed the yum provided git and git-perl and grabbed a newer one. This was just like I had to do when I built stash on a different RHER6 server. I used rpmforge 1.7.10 x86_64 rpm's for git and git-perl which solved the push via https issue.


author: KieranA
body: Am I perhaps able to get the actual URL? You could GPG encrypt it if I gave you my public key. I'm thinking we need to put this issue on JIRA.


author: KieranA
body: Just as a note, this has now been dealt with in [JAC here](https://jira.atlassian.com/browse/SRCTREE-1547). A workaround in the meantime is to specify the username in the URL as was shown above: <https://username@git.domain.com/scm/project/repo.git>

comments: author: Matt Baker
body: Keiran,

I'm already specifying a username in the URL, as shown above.


author: KieranA
body: Sorry Matt, I've commented on completely the wrong issue. I'm dealing with two similar ones. Ignore this post (I tried to delete but it won't let me)


author: Matt Baker
body: Kieran,

After doing some further digging on my own, I believe the problem to be related to the version of OpenSSL installed on my server (1.0.1) and the version of OpenSSL supported by Curl which gets installed with SourceTree.

If I run git clone <https://username@git.domain.com/scm/project/repo.git> I get this response:

Cloning into 'testing'...  
error: error:14077458:SSL routines:SSL23_GET_SERVER_HELLO:reason(1112) while accessing[https://username@git.domain.com/scm/project/repo.git/info/refs?service=git-upload-pack](https://administrator@git.gisinc.com/scm/test/testing.git/info/refs?service=git-upload-pack)  
fatal: HTTP request failed

A quick Google search returns various complaints around this related to OpenSSL, Curl, and version differences between client and server.


author: KieranA
body: At the terminal, could you try doing "ssh -T git@git.domain.com" (-T for test). Either the URL is malformed or you truly have no access.


author: Matt Baker
body: Kieran,

Stash is running on it's default port 7990, and I followed your documentation about using mod_proxy with apache to serve that externally to HTTPS/443.

The URL I linked above is a cleaned up version of what comes straight out of the Stash interface when you click the Clone button. The majority of our devs work from home, or outside the firewall. I'd prefer to only open HTTPS/443 and that 7999 SSH port if possible.


author: KieranA
body: If your SSH URL is specifying a port explicitly, is your HTTPS site configured for a specific port also? If so, perhaps specify that so your URL is [https://username@git.domain.com:7999/scm/project/repo.git](https://username@gis.domain.com/scm/project/repo.git)?