问题描述
因此,在学校,我们需要安装证书才能访问https站点。在firefox中,我可以导入证书。但是,我不能在命令行中这样做。例如,运行git push
我得到:
fatal: unable to access 'https://github.com/user/repo': server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none
如何导入证书以删除此证书?导入必须能够为我进行身份验证。另外,它是一个.cer
文件,因此.crt
的答案将不起作用。另外,我不想要像我已经有了的有关如何设置git的步骤。我想知道是否可以这样做。还是可以完全禁用git
命令的身份验证,并使其忽略诸如the answer这样的证书?另外,我不想加载网页,我已经设置了firefox来做到这一点。我希望git push
命令给出如下标准输出:
[master 630d087] message
1 file changed, 93 insertions(+), 80 deletions(-)
rewrite somefile (84%)
Counting objects: 9, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (5/5), 978 bytes | 0 bytes/s, done.
Total 5 (delta 2), reused 0 (delta 0)
To https://github.com/User/Repo.git
851ae39..630d087 master -> master
注意:我发现了它的git config --global http.sslverify false
。但我想看到所有问题的答案,而不仅仅是git hack
最佳解决方法
长话短说
为了使所有功能(不仅是浏览器)正常工作,您需要将该CA证书添加到系统的受信任CA存储库中。
在ubuntu中:
-
转到/usr /local /share /ca-certificates /
-
创建一个新文件夹,即“ sudo mkdir school”
-
将.crt文件复制到school文件夹中
-
确保权限是确定的(文件夹为755,文件为644)
-
运行“ sudo update-ca-certificates”
为什么
让我解释一下发生了什么,因此其他发布者看到了为什么他们不需要任何证书即可通过HTTPS使用Github。
发生的情况是您的学校正在拦截所有SSL通信,可能是为了监视它们。
为此,他们所做的本质上是“中间人”攻击,因此,您的浏览器正确地抱怨说他无法验证github的证书。您的学校代理正在取出github的证书,而是提供自己的证书。
当您的浏览器尝试针对签署了github证书的CA验证学校提供的证书时,它理应会失败。
因此,为了使SSL连接在学校中正常工作,您需要自觉接受”MITM”攻击。您可以通过将学校的CA证书添加为受信任证书来做到这一点。
当您信任该学校CA时,对假github证书的验证将起作用,因为该假github证书将由学校CA验证。
请注意,SSL连接不再安全,因为您的学校管理员将能够拦截您所有的加密连接。
次佳解决方法
ca-certificates
软件包的README.Debian
中包含说明:
If you want to install local certificate authorities to be implicitly trusted, please put the certificate files as single files ending with
.crt
into/usr/local/share/ca-certificates/
and re-runupdate-ca-certificates
.
请注意,它在这里提到的目录与其他答案不同:
/usr/local/share/ca-certificates/
复制到/usr/local/share/ca-certificates/
之后,您可以更新证书的权限并按照Telegraphers答复中所述运行sudo update-ca-certificates
。您将在输出中看到已添加证书。
第三种解决方法
扩展名.crt,.pem和.cer可以互换,只是更改文件扩展名,它们具有相同的形式。尝试这个:
$ sudo cp mycert.cer /usr/share/ca-certificates/mycert.pem
$ sudo dpkg-reconfigure ca-certificates
$ sudo update-ca-certificates
$ git config --global http.sslCAInfo /usr/share/ca-certificates/mycert.pem
第四种方法
我使用以下先前答案的汇编:
sudo -i
echo | openssl s_client -showcerts -servername site.example.com -connect example.com:443 2>/dev/null | awk '/-----BEGIN CERTIFICATE-----/, /-----END CERTIFICATE-----/' >> /usr/local/share/ca-certificates/ca-certificates.crt
update-ca-certificates
可以将其修改为单线。
通常,site.example.com
和example.com
都是相同的主机名。
第五种方法
我阅读了所有解决方案,并像这样解决了;
sudo openssl x509 -inform DER -in certificate.cer -out certificate.crt
sudo mv certificate.crt /usr/share/ca-certificate/
cd /usr/share/ca-certificate
sudo chmod 644 certificate.crt
sudo dpkg-reconfigure ca-certificates
sudo update-ca-certificates