如何为命令行安装证书

Uni*_*ity 125 command-line certificates https

所以在学校我们需要安装一个证书来访问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
Run Code Online (Sandbox Code Playgroud)

如何导入证书以删除它?导入必须能够为我进行身份验证。此外,它是一个.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
Run Code Online (Sandbox Code Playgroud)

注意:我发现了它的git config --global http.sslverify false. 但我想看到所有问题的答案,而不仅仅是 git hack

Tel*_*her 201

TL; 博士

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

  • 在 Ubuntu 16.04 上将 CA 添加到 `/usr/local/share/ca-certificates` 后,我不得不使用 `sudo dpkg-reconfigure ca-certificates` 来获取 CA。 (7认同)
  • 请[编辑]您的答案以提供其他事实 - 不要在评论中留下。 (2认同)

Rob*_*mer 53

ca-certificates软件包的说明README.Debian如下:

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

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

/usr/local/share/ca-certificates/
Run Code Online (Sandbox Code Playgroud)

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

  • 这在 Ubuntu 16.04 上也适用于我。接受的答案中的路径对我不起作用。 (4认同)

Mik*_*ike 28

扩展名.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
Run Code Online (Sandbox Code Playgroud)

  • 如果您的 .CER 文件是二进制文件(DER 格式),那么您不能只更改扩展名。使用 [`openssl(1)`](http://manpages.ubuntu.com/manpages/vivid/en/man1/openssl.1ssl.html) 将证书转换为 PEM 格式。运行:`$ openssl -in mycert.cer -inform DER -out mycert.pem -outform PEM` (6认同)
  • @Archuser 也许正确的命令是这样的:`openssl x509 -inform DER -in certificate.cer -out certificate.pem` (2认同)

小智 16

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

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
Run Code Online (Sandbox Code Playgroud)


Tom*_*liy 9

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

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
Run Code Online (Sandbox Code Playgroud)

通常两者site.example.comexample.com是相同的主机名。