如何为命令行安装证书

所以在学校我们需要安装证书才能访问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 

如何导入证书以删除它? 导入必须能够为我进行身份validation。 此外,它是.cer文件,因此.crt的答案将不起作用。 此外,我不想像我已经拥有的那样设置如何设置git的步骤。 我想知道是否可以这样做。 或者我可以完全使用git命令禁用身份validation,并使其忽略证书,如此处的答案所示 ? 另外,我不想加载网页,我已经设置了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

TL; DR

要使一切工作而不仅仅是您的浏览器,您需要将该CA证书添加到系统的可信CA存储库中。

在ubuntu中:

  • 转到/ usr / local / share / ca-certificates /
  • 创建一个新文件夹,即“sudo mkdir school”
  • 将.crt文件复制到学校文件夹中
  • 确保权限正常(文件夹为755,文件为644)
  • 运行“sudo update-ca-certificates”

为什么

让我解释一下发生了什么,所以其他海报看到为什么他们不需要任何证书来通过HTTPS使用Github。

发生了什么事情,你的学校正在拦截所有的SSL通信,可能是为了监控它们。

要做到这一点,他们所做的实质上是一个“中间人”攻击,正因为如此,你的浏览器正确地抱怨他无法validationgithub的证书。 您的学校代理人正在取得github的证书,而是提供自己的证书。

当您的浏览器尝试validation学校为签署github证书的CA提供的证书时,它理所当然地失败了。

因此,要使SSL连接在学校中工作,您需要有意识地接受“MITM”攻击。 您可以通过将学校的CA证书添加为可信任的证书来实现。

当您信任该学校CA时,您对伪github证书的validation将起作用,因为假github证书将由学校CAvalidation。

请注意,SSL连接不再安全,因为您的学校管理员将能够拦截您的所有加密连接。

ca-certificates包中包含README.Debian的说明:

如果要安装本地证书颁发机构以进行隐式信任,请将证书文件作为以.crt结尾的单个文件放入/usr/local/share/ca-certificates/并重新运行update-ca-certificates

请注意,它提到了一个与其他答案不同的目录:

 /usr/local/share/ca-certificates/ 

复制到/usr/local/share/ca-certificates/您可以更新证书的权限并运行sudo update-ca-certificates如Telegraphers答案中所述。 您将在输出中看到已添加证书。

扩展名.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.comexample.com都是相同的主机名。

我有一个类似的问题,在firefox和谷歌浏览器安装证书工作但在终端sudo apt-get update不起作用,并给出403 Forbidden IP错误。 我也有一个sample.cer文件。 所以基本上我必须先将其转换为.crt。

 sudo openssl x509 -inform DER -in sample.cer -out sample.crt 

在做sudo dpkg-reconfigure ca-certificates我找不到所需的证书。 我的问题是我在错误的地方复制证书。

我没有在$/usr/share/ca-certificates上复制它,而是将它复制到$/usr/local/share/ca-certificates但是把它放在正确的位置解决了我的问题。 但我仍然无法更新软件包或安装新软件包。

快速修复(对我来说):

使用ftp而不是http

 sudo sed -is/http/ftp/ /etc/apt/sources.list && apt-get update 

以上命令工作。 在进行更改之前,请复制sources.list文件。

如果有什么不清楚或不正确请请纠正我。

要使用https访问网站,无论您使用的是CLI还是GUI浏览器,都不需要您的学校证书。

要通过http(s)使用git ,您需要在GitHub上的配置文件设置中注册您的公钥。

这里有更多的信息。 在此处更改您的GitHub个人资料。


试试这个:

 sudo apt-get install w3m w3m https://github.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