【问题标题】:How to entirely disable SSL certificate checks in Mercurial / TortoiseHg?如何在 Mercurial / TortoiseHg 中完全禁用 SSL 证书检查?
【发布时间】:2011-07-19 00:30:40
【问题描述】:

我正在寻找一种方法,让 --insecure 选项成为任何 hg \ TortoiseHg 命令的默认选项。

请不要写这是一种不好的做法 - 我知道可能存在的风险并认为它们是完全可以接受的。

【问题讨论】:

    标签: ssl mercurial tortoisehg


    【解决方案1】:

    如果您的目标是在推/拉期间消除证书指纹警告,那么有更好的方法来做到这一点。使用 .hg/hgrc(或 ~/.hgrc -- 参见 cmets)中的 [hostfingerprints]。

    [hostfingerprints]
    server.example.org = 38:76:52:7c:87:26:9a:8f:4a:f8:d3:de:08:45:3b:ea:d6:4b:ee:cc
    

    这将消除警告而不消除安全检查。

    注意:我从你的 cmets 看到另一个答案,你已经找到了这个解决方案。无论如何我都会发布这个,以防其他人有同样的问题。

    【讨论】:

    • 感谢您发布此信息。这正是我所需要的。
    • 有一个关于使用 bash 获取服务器指纹的好问题:stackoverflow.com/a/5165073/1760643 这里是命令:openssl s_client -connect <host>:<port> < /dev/null 2>/dev/null | openssl x509 -fingerprint -noout -in /dev/stdin
    • 我的必须进入 ~/.hgrc
    【解决方案2】:

    [web] 部分中的cacerts 设置为空字符串看起来是一样的。来自the source

    if cmdoptions.get('insecure', False):
        ui.setconfig('web', 'cacerts', '!', '--insecure')
    

    the wiki confirms:

    有时它可能是权宜之计 禁用安全检查,例如 与主机打交道时 自签名证书。这可以是 通过禁用 CA 证书完成 命令行配置:

    hg push --config web.cacerts= https://self-signed-host/repo

    因此,将cacerts=! 放在全局 hgrc 的 [web] 部分(类似 linux 的 /etc/mercurial/hgrc)将帮助您实现目标。

    【讨论】:

    • 这种方法确实有效 - 非常感谢!唯一的问题是 Hg 在hg pullhg push 期间多次打印"warning: something.com certificate with fingerprint 81:....:fe not verified (check hostfingerprints or web.c acerts config setting)"
    • 所以我最终决定使用[hostfingerprints]部分的方法。
    • [hostfingerprinst] 的好处是您可以将它们放在存储库 hgrc 中而不是根目录中,因此此更改不会影响所有其余存储库。
    • 在我的特殊情况下,[web] caserts= 没有在存储库级别工作。可能是我做错了什么。
    • 在 Mercurial >= 3.9 web.cacerts=!选项已被删除。 mercurial-scm.org/wiki/SecureConnections
    【解决方案3】:

    您可以使用aliases 来实现这一点。将此添加到您的 .hgrc

    [alias]
    push = push --insecure
    

    问题是您必须为要使用的每个命令执行此操作,我建议您为别名使用与默认名称不同的名称。

    据我所知,没有办法“自动”对所有命令强制执行 --insecure

    【讨论】:

    • 即使在内部调用 Mercurial(不带参数)时也可以使用 - 从 IntelliJ IDEA。
    • 正如您悄悄指出的那样,如果您要使用alias,您可能应该使用更像ipush = push --insecure 这样它不会与标准命令混淆(即让用户理解发生了什么,默认情况下不要“欺骗”命令做“错误的事情”)。
    【解决方案4】:

    背景

    正如Bruce Alderman's answer 中所指出的,使用--insecure 选项的一个很好的替代方法是简单地将主机指纹添加到~/.hgrc 文件中。 (由于安全风险,可能禁止将它们添加到.hg/hgrc。)但是[hostfingerprints] 部分已被弃用。

    新说明

    将以下内容添加到~/.hgrc

    [hostsecurity]
    <host>:fingerprints=sha256:<hash>
    

    其中&lt;host&gt; 应替换为主机名(不带https:// 前缀),&lt;hash&gt; 应替换为 SHA-256 指纹(32 字节,写为: 分隔的十六进制)。以下SHA-256 fingerprint command的输出

    openssl s_client -connect <host>:<port> < /dev/null 2>/dev/null | openssl x509 -fingerprint -sha256 -noout -in /dev/stdin
    

    替换&lt;host&gt;&lt;port&gt; 后的形式为

    SHA256 Fingerprint=<hash>
    

    例如,对于从本地计算机运行的自签名证书,可能在~/.hgrc 中有一个条目,看起来像

    [hostsecurity]
    localhost:fingerprints=sha256:DD:30:5A:9B:2C:E1:59:7E:46:C4:42:D3:41:34:03:17:2A:CF:50:E8:DF:78:E6:2E:C9:42:D9:9A:C9:58:AC:52
    

    Mercurial's page about secure connections. 上有更多文档

    【讨论】:

      猜你喜欢
      • 2017-02-03
      • 2014-06-23
      • 2016-10-07
      • 2012-03-13
      • 2013-03-04
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 2019-11-22
      相关资源
      最近更新 更多