如何为命令行安装证书


71

因此,在学校,我们需要安装证书才能访问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命令的身份验证,使其忽略证书,如此处的答案所示?另外,我不想加载网页,我已经设置了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



@EricCarvalho不,多数民众赞成在.crt。我需要.cer
环球电力公司

您的git命令或要执行的操作有问题吗?@AB
AB

@AB我想允许git使用学校提供给我们的证书,而不是尝试使用github证书。或者,如果这不起作用,则允许学校的证书为我认证
Universal Electricity

请注意,.crt和.cer扩展名是可互换的,只需更改文件扩展名,它们的格式相同。
迈克

Answers:


116

TL; DR

为了使所有功能(不仅是浏览器)正常工作,您需要将该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连接不再安全,因为您的学校管理员将能够拦截您所有的加密连接。


这与Mike的答案本质上是相同的,但不需要dpkg-reconfigure。可能是因为git或其他命令行的SSL验证不是100%标准。为了解决您学校首先实施的“ SSL hack”,可能需要使用所谓的“ git hack”。
电报员2015年

另外,请注意,您需要root权限才能运行此命令,因此sudo命令需要成功,否则您将无法更新系统的证书颁发机构。
电报员

2
修改您的答案以提供其他事实-请勿在评论中留下。
贡伯特

1
我相信应该是/usr/local/share/ca-certificates/。请参阅man update-ca-certificates,其中谈到了存在白名单,/usr/share/ca-certificates/但谈到了它如何隐式信任/usr/local/share/ca-certificates/目录中的所有内容。
伊恩·希克森

3
在将CA添加到Ubuntu 16.04上后, /usr/local/share/ca-certificates我不得不使用sudo dpkg-reconfigure ca-certificates它来提取CA。
马特·

40

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答复中所述运行。您将在输出中看到已添加证书。


4
这在Ubuntu 16.04上也对我有效。接受的答案中的路径对我不起作用。
Plazgoth'4

这必须是一个公认的答案,这是ubuntu服务器16.04 LTS的有效解决方案。
Lasitha Benaragama

15

扩展名.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

好吧,尽管这是事实,但这没有帮助。但将来可能会对人们有所帮助
环球电力公司

我又增加了一行,尝试使git信任您的证书,请注意我更改了cer。在4个步骤中的两个步骤中将.pem替换为.crt。@Unicorns非常非常好吃
Mike

3
如果您的.CER文件是二进制(DER格式),则不能仅更改扩展名。使用openssl(1)该证书为PEM格式转换。运行:$ openssl -in mycert.cer -inform DER -out mycert.pem -outform PEM
拱用户

1
@Archuser也许正确的命令是这样的:openssl x509 -inform DER -in certificate.cer -out certificate.pem
artificerpi

5

我使用以下先前答案的汇编:

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是相同的主机名。


3

我阅读了所有解决方案,并像这样解决了;

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

1

我遇到了类似的问题,在firefox和google chrome中安装了证书,但是在终端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 -i s/http/ftp/ /etc/apt/sources.list && apt-get update

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

如果有任何不清楚或不合适的地方,请纠正我。


0

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

git通过http 使用,您需要在GitHub上的个人资料设置中注册公共密钥。

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


尝试这个:

sudo apt-get install w3m
w3m https://github.com/

…无需附加证书即可工作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.