Reputation: 9116
I am using Git on Windows. I installed the msysGit package. My test repository has a self signed certificate at the server. I can access and use the repository using HTTP without problems. Moving to HTTPS gives the error:
SSL Certificate problem: unable to get local issuer certificate.
I have the self signed certificate installed in the Trusted Root Certification Authorities of my Windows 7 - client machine. I can browse to the HTTPS repository URL in Internet Explorer with no error messages.
This blog post by Philip Kelley explained that cURL does not use the client machine's certificate store. I followed the blog post's advice to create a private copy of curl-ca-bundle.crt
and configure Git to use it. I am sure Git is using my copy. If I rename the copy; Git complains the file is missing.
I pasted in my certificate, as mentioned in the blog post, I still get the message "unable to get local issuer certificate".
I verified that Git was still working by cloning a GitHub Repository via HTTPS.
The only thing I see that's different to the blog post is that my certificate is the root - there is no chain to reach it. My certificate originally came from clicking the IIS8 IIS Manager link 'Create Self Signed Certificate'. Maybe that makes a certificate different in some way to what cURL expects.
How can I get Git/cURL to accept the self signed certificate?
Upvotes: 754
Views: 1585002
Reputation: 157
This may also happen if there is issue with proxy. Just try this in cmd with the respective proxy
git config --global http.proxy http://***.**.***.***:**
Upvotes: 0
Reputation: 161
I came here after copy-pasting the error message I got into the search engine. In my case I had simply forgotten to turn on the enterprise VPN. After turning that on, my git commands to remote worked.
Upvotes: 0
Reputation: 615
Use Github Desktop. It avoids all this mess. No configuration required, no re-settings, no SSL issues.
In fact Github Desktop can help you work with multiple enterprise and cloud versions at the same time.
Upvotes: -3
Reputation: 80934
I have also recently faced this issue, and you get this issue usually when you are behind some corporate firewall, and then git cannot complete the https handshake with the git repository that you are trying to access. One of the way to solve it, is to use this command:
git config --global http.sslverify false
But as others have said this pretty much disables the ssl verification. The only secure way is to get the SSL certificate and add it locally to your Git folder, specifically in the file ca-bundle.crt
.
One way to solve it, is to use the package pcer
, to install it you need to do the following:
npm i -g pcer
Then you execute the following:
pcer alias git "C:\Program Files\Git\mingw64\etc\ssl\certs\ca-bundle.crt"
This would make git
point to the above path, and then you can fetch
the certificate by doing the following:
pcer fetch github.com -l git
Then you can perform git clone and it would work normally. For example:
For more information:
https://www.npmjs.com/package/pcer
https://github.com/PeterHdd/pcer
Note, I'm the owner of this package
Upvotes: 20
Reputation: 1594
I got this error when trying to "clone" the project. One work-around is to just use the "download as zip" on the webpage, which, for me, achieved what I wanted to do.
Upvotes: 1
Reputation: 28845
Download and install local certificate. Probably it is published at your company site. For instance, *.cer file.
Right click it and select Install Certificate
. 'Certificate Inport Wizard' will appear. Select Local Machine
. Press Next
, confirm.
Select Place all certificates in the following store
, press Browse
and select Trusted Root Certification Authorities
, OK
, Finish
.
Also you can check if other applications can fetch, pull or push data. For instance, in Android Studio
or probably IDEA
you should select in Settings
this checkbox: Use credential helper
.
Upvotes: 2
Reputation: 2227
I tried following and it worked ✅
git config --global http.sslVerify false
Upvotes: -4
Reputation: 2337
You might have a DNS issue and not a certificate issue, so before you disable SSL verification in your Git shell you should rule out a DNS problem. Cases such as these have been mentioned in Q&A forums such as https-issues-possibly-related-to-dns. If you are using WSL on Windows as your terminal, then you can try running sudo echo nameserver 8.8.8.8 > /etc/resolv.conf
and then issue the git commands to see if that makes a difference. This does not seem to be a permanent DNS fix (lasting only the lifetime of your terminal session), but it could help you determine whether it is a DNS issue and not a certificate issue. You could also check this document on configuring your network to use a public DNS. Again, this is only to help you determine if your DNS settings might need adjusting in order to help resolve the certificate issues.
Upvotes: 0
Reputation: 1152
This works for me. I opened cmd line and ran following command. and pulled again.
git config --global http.sslVerify false
Upvotes: 0
Reputation: 675
When using Windows, the problem resides that git by default uses the "Linux" crypto backend. Starting with Git for Windows 2.14, you can configure Git to use SChannel, the built-in Windows networking layer as the crypto backend. To do that, just run the following command in the GIT client:
git config --global http.sslbackend schannel
This means that it will use the Windows certificate storage mechanism and you don't need to explicitly configure the curl CA storage (http.sslCAInfo) mechanism.
Upvotes: 28
Reputation: 13585
The problem is that git by default using the "Linux" crypto backend.
Beginning with Git for Windows 2.14, you can now configure Git to use SChannel, the built-in Windows networking layer as the crypto backend. This means that it will use the Windows certificate storage mechanism and you do not need to explicitly configure the curl CA storage mechanism: https://msdn.microsoft.com/en-us/library/windows/desktop/aa380123(v=vs.85).aspx
Just execute:
git config --global http.sslbackend schannel
That should help.
Using schannel is by now the standard setting when installing git for Windows, also it is recommended to not checkout repositories by SSH anmore if possible, as https is easier to configure and less likely to be blocked by a firewall it means less chance of failure.
Upvotes: 1084
Reputation: 61
I have resolved the issue by adding below entry in ${HOME}/.gitconfig file
[remote "origin"]
proxy=
In most case it will happen when proxy enabled in your machine so above mentioned entry will fix this problem.
Upvotes: 0
Reputation: 179
solved my problem git config --global http.sslBackend schannel
Upvotes: 5
Reputation: 7172
Open Git Bash and run the command if you want to completely disable SSL verification.
git config --global http.sslVerify false
Note: This solution opens you to attacks like man-in-the-middle attacks. Therefore turn on verification again as soon as possible:
git config --global http.sslVerify true
Upvotes: 510
Reputation: 361
To completely detail out the summary of all the above answers.
This problem is occuring because git cannot complete the https handshake with the git server were the repository you are trying to access is present.
Steps to get the certificate from the github server
Steps to add the certificate to local git certificate store
Now open the certificate you saved in the notepad and copy the content along with --Begin Certificate-- and --end certificate--
To find the path were all the certificates are stored for your git, execute the following command in cmd.
git config --list
Check for the key 'http.sslcainfo', the corresponding value will be path.
Note: If u can't find the key http.sslcainfo check for Git's default path: C:\Program Files\Git\mingw64\ssl\certs
Note 1 : open this file administrator mode otherwise you will not be able to save it after update. (Tip - you can use Notepad++ for this purpose)
Note 2 : Before modifying this file please keep a backup elsewhere.
Upvotes: 36
Reputation: 9116
An answer to Using makecert for Development SSL fixed this for me.
I do not know why, but the certificate created by the simple 'Create Self Signed Certificate' link in IIS Manager does not do the trick. I followed the approach in the linked question of creating and installing a self-signed CA Root; then using that to issue a Server Authentication Certificate for my server. I installed both of them in IIS.
That gets my situation the same as the blog post referenced in the original question. Once the root certificate was copy/pasted into curl-ca-bundle.crt the git/curl combo were satisfied.
Upvotes: 48
Reputation: 456
I had this error occur when using visual studio. This occurs when you have the Cryptographic Network provider settings set to OpenSSL in the Visual Studio Options window. When I changed the setting to Secure Channel it solved it for me. This setting must have been set for me when I upgraded my VS.
Upvotes: 1
Reputation: 5816
git config --global http.sslbackend secure-transport
(had to do that after update to Big Sюr)
Upvotes: 3
Reputation: 131
Jan 2021 - Got around this in VS2019 by setting Menu > Git > Settings > Git Global Settings > Cryptographic Network Provider > [Secure Channel] instead of [OpenSSL]
Git SSL certificate problem unable to get local issuer certificate (fix)
PS: Didn't need to set --global or --local http.sslVerify false. I was cloning an Azure DevOps repo which wasn't using any self signed certs.. This seems like an issue with either VS2019 or Git for Windows.. They need to fix it !!
Upvotes: 13
Reputation: 578
This might help some who come across this error. If you are working across a VPN and it becomes disconnected, you can also get this error. The simple fix is to reconnect your VPN.
Upvotes: -1
Reputation: 1524
I've had the same problem from Azure DevOps (Visual Studio). Finally I've decided to clone my repo using SSH protocol because of i've prefered it instead of disabling SSL verification.
You only need to generate a SSH Key, you can do it so... SSH documentation
ssh-keygen
And then, import your public key on yout git host (like Azure Devops, Github, Bitbucket, Gitlab, etc.)
Upvotes: 1
Reputation: 934
In my case, I had to use different certificates for different git repositories.
Follow steps below (If you have a certificate of your repository, you can read from step 5)
Go to remote repository's site. Ex: github.com, bitbucket.org, tfs.example...
Click Lock icon on the upper left side and click Certificate.
Go to Certification Path tab and double click to .. Root Certificate
Go to Details tab and click Copy to file.
Export/Copy certificate to wherever you want. Ex: C:\certs\example.cer
Open git bash at your local repository folder and type:
$ git config http.sslCAInfo "C:\certs\example.cer"
Now you can use different certificates for each repository.
Remember, calling with the --global
parameter will also change the certificates of git repositories in other folders, so you should not use the --global
parameter when executing this command.
Upvotes: 3
Reputation: 1280
push failed
fatal: unable to access
SSL certificate problem: unable to get local issuer certificate
After committing files on a local machine, the "push fail" error can occur when the local Git connection parameters are outdated (e.g. HTTP change to HTTPS).
.git
folder in the root of the local directoryconfig
file in a code editor or text editor (VS Code, Notepad, Textpad)url = http://git.[host]/[group/project/repo_name] (actual path)
replace it with either
url = ssh://git@git.[host]:/[group/project/repo_name] (new path SSH)
url = https://git.[host]/[group/project/repo_name] (new path HTTPS)
Upvotes: 0
Reputation: 3664
I had this issue as well. In my case, I was trying to get a post-receive Git hook to update a working copy on a server with each push. Tried to follow the instructions in the blog you linked to. Didn't work for me as well and overriding the settings on a per-user basis didn't seem to work either.
What I ended up having to do was disable SSL verification (as the article mentions) for Git as a whole. Not the perfect solution, but it'll work until I can figure out a better one.
I edited the Git config text file (with my favorite line-ending neutral app like Notepad++) located at:
C:\Program Files (x86)\Git\etc\gitconfig
In the [http] block, I added an option to disable sslVerify. It looked like this when I was done:
[http]
sslVerify = false
sslCAinfo = /bin/curl-ca-bundle.crt
That did the trick.
NOTE:
This disables SSL verification and is not recommended as a long term solution.
You can disable this per-repository which still isn't great, but localizes the setting.
With the advent of LetsEncrypt.org, it is now fairly simple, automated and free to set up SSL as an alternative to self-signed certs and negates the need to turn off sslVerify.
Upvotes: 98
Reputation: 7279
To fix the especific error SSL certificate problem: unable to get local issuer certificate in git
I had the same issue with Let's Encrypt certificates .
An web site with https we just to need :
SSLEngine On
SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
but git pull says :
fatal: unable to access 'https://example.com/git/demo.git/': SSL certificate problem: unable to get local issuer certificate
To fix it, we need also add:
SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem
Upvotes: 3
Reputation: 2222
In my case, as I have installed the ConEmu Terminal for Window 7, it creates the ca-bundle
during installation at C:\Program Files\Git\mingw64\ssl\certs
.
Thus, I have to run the following commands on terminal to make it work:
$ git config --global http.sslbackend schannel
$ git config --global http.sslcainfo /mingw64/ssl/certs/ca-bundle.crt
Hence, my C:\Program Files\Git\etc\gitconfig
contains the following:
[http]
sslBackend = schannel
sslCAinfo = /mingw64/ssl/certs/ca-bundle.crt
Also, I chose same option as mentioned here when installing the Git.
Hope that helps!
Upvotes: 11
Reputation: 114
One thing that messed me up was the format of the path (on my Windows PC). I originally had this:
git config --global http.sslCAInfo C:\certs\cacert.pem
But that failed with the "unable to get local issuer certificate" error.
What finally worked was this:
git config --global http.sslCAInfo "C:\\certs\\cacert.pem"
Upvotes: 4
Reputation: 1423
I faced this issue as well. And finally got resolved by getting guidance from this MSDN Blog.
Update
Actually you need to add the certificate in git's certificates file curl-ca-bundel.cert that resides in Git\bin directory.
Steps
Finally check the status. Please note that backup curl-ca-bundle.crt file before editing to remain on safe side.
Upvotes: 67
Reputation: 1284
I have had this issue before, and solve it using the following config.
[http "https://your.domain"]
sslCAInfo=/path/to/your/domain/priviate-certificate
Since git 2.3.1, you can put https://your.domain
after http to indicate the following certificate is only for it.
Upvotes: 17