当前位置: 首页 > 知识库问答 >
问题:

如何使git接受自签名证书?

司空健
2023-03-14

使用Git,有没有办法告诉它接受自签名证书?

我使用https服务器来托管git服务器,但目前证书是自签名的。

当我第一次尝试在那里创建回购时:

git push origin master -f

我得到的错误:

error: Cannot access URL     
https://the server/git.aspx/PocketReferences/, return code 22

fatal: git-http-push failed

共有3个答案

章彬郁
2023-03-14

我不是[编辑:现有答案的原始版本的超级粉丝,因为禁用安全检查应该是最后的手段,而不是提供的第一个解决方案。即使您不能在第一次接收时信任自签名证书而不使用一些额外的验证方法,但在后续的git操作中使用该证书至少会使只有在下载证书后才会发生的攻击变得更加困难。换句话说,如果你下载的证书是真实的,那么从那时起你就很好了。相反,如果你只是禁用验证,那么你在任何时候都很容易受到任何类型的中间人攻击。

举一个具体的例子:著名的repo.or.cz存储库提供了一个自签名证书。我可以下载那个文件,把它放在像/etc/ssl/certs这样的地方,然后这样做:

# Initial clone
GIT_SSL_CAINFO=/etc/ssl/certs/rorcz_root_cert.pem \
    git clone https://repo.or.cz/org-mode.git

# Ensure all future interactions with origin remote also work
cd org-mode
git config http.sslCAInfo /etc/ssl/certs/rorcz_root_cert.pem

请注意,在这里使用本地git config(即没有--global)意味着这个自签名证书仅受这个特定存储库的信任,这很好。它也比使用GIT_SSL_CAPATH更好,因为它消除了git通过可能受到损害的不同证书授权中心进行验证的风险。

郏正信
2023-03-14

您可以设置GIT_SSL_NO_VERIFYtrue

GIT_SSL_NO_VERIFY=true git clone https://example.com/path/to/git

或者,在命令行上将Git配置为不验证连接:

git -c http.sslVerify=false clone https://example.com/path/to/git

请注意,如果不验证SSL/TLS证书,则容易受到MitM攻击。

湛鸿雪
2023-03-14

试试http。sslCAPath或http。sslCAInfo。亚当·斯皮尔斯的回答给出了一些很好的例子。这是这个问题最安全的解决方案。

尝试使用正确的配置变量将-c传递到git,或者使用Flow的答案:

git -c http.sslVerify=false clone https://example.com/path/to/git

可以全局停用ssl验证。强烈建议不要这样做,但出于完整性考虑:

git config --global http.sslVerify false # Do NOT do this!

git中有相当多的SSL配置选项。从git config的手册页:

http.sslVerify
    Whether to verify the SSL certificate when fetching or pushing over HTTPS.
    Can be overridden by the GIT_SSL_NO_VERIFY environment variable.

http.sslCAInfo
    File containing the certificates to verify the peer with when fetching or pushing
    over HTTPS. Can be overridden by the GIT_SSL_CAINFO environment variable.

http.sslCAPath
    Path containing files with the CA certificates to verify the peer with when
    fetching or pushing over HTTPS.
    Can be overridden by the GIT_SSL_CAPATH environment variable.

其他一些有用的SSL配置选项:

http.sslCert
    File containing the SSL certificate when fetching or pushing over HTTPS.
    Can be overridden by the GIT_SSL_CERT environment variable.

http.sslKey
    File containing the SSL private key when fetching or pushing over HTTPS.
    Can be overridden by the GIT_SSL_KEY environment variable.

http.sslCertPasswordProtected
    Enable git's password prompt for the SSL certificate. Otherwise OpenSSL will
    prompt the user, possibly many times, if the certificate or private key is encrypted.
    Can be overridden by the GIT_SSL_CERT_PASSWORD_PROTECTED environment variable.
 类似资料:
  • 问题内容: 我需要通过SSL连接到LDAP目录。 在非生产环境中,我们使用自签名证书,这些证书当然无法通过以下方式进行验证: 我知道如何对启用S​​SL的连接使用[自定义信任管理器]http://codingdict.com/questions/1835),但是不知道如何在不管理实际连接的情况下与JNDI API结合使用。也就是说,我可以在哪里在以下标准设置下插入信任管理器? 提前致谢。 问题答案

  • 我正在使用AWS API网关和一个后端。为了确保所有的连接都通过API网关,我需要使用TLS客户端身份验证(又名双向身份验证,相互身份验证)。 原则上,这与以下内容一起工作: 我遇到的问题是这个错误: TLS:无法验证客户端的证书:X509:由未知授权机构签署的证书(可能是因为在尝试验证候选授权机构证书“Apigateway”时“X509:签名无效:父证书无法签署此类证书”)

  • 问题内容: 我目前正在尝试让Jenkins构建托管在GitHub企业存储库中的项目。我们正在对GitHub服务器使用自签名证书,这会导致一些问题。 这些我能解决的大多数问题: git命令行: 获取PEM格式的证书,并教git使用.config文件查找信息: Jenkins GitHub插件: 将证书信息添加到java cacerts密钥库中: 将信息导入密钥库后重新启动Jenkins终于成功了,因

  • 我的手被https、ssl、PKI之类的东西弄得脏兮兮的。对于自签名证书,有一点我不太理解。假设我想创建一个自签名证书,并在我们想要建立安全连接时将其发送给我的朋友。 所以步骤是: 创建一个私钥。 创建一个公钥。 用我的公钥在证书上签名。 因此,当我的朋友得到我的证书时,他必须验证他得到的证书是我的,他需要解密数字签名。但为了解密和验证他必须拥有我的私钥。所以,我有点困惑。

  • 问题内容: 如何在Android上的Java中接受自签名证书? 一个代码示例将是完美的。 我在Internet上到处都是,虽然有人声称找到了该解决方案,但它要么不起作用,要么没有示例代码来对其进行备份。 问题答案: 我在exchangeIt中具有此功能,该功能可通过WebDav连接到Microsoft Exchange。这是一些创建HttpClient的代码,该HttpClient将通过SSL连接