首页 > 解决方案 > 具有自签名证书的本地 HTTPS GitLab 服务器的克隆问题

问题描述

我在克隆配置了 HTTPS 并使用自签名证书的本地 GitLab 存储库时遇到问题。

我可以使用 Firefox 等访问 GitLab HMI,但是在本地存储库和伺服存储库之间执行 git 命令时遇到问题(拉、推、克隆等)。

例如(IP更改为123.123.123.123和其他路径更改):

$ git clone https://123.123.123.123/MyName/MyProject.git
fatal: unable to access 'https://123.123.123.123/MyName/MyProject.git/': SSL: certificate subject name (123.123.123.123) does not match target host name '123.123.123.123'

以防万一:

$ git clone http://123.123.123.123/MyName/MyProject.git
fatal: unable to access 'http://123.123.123.123/MyName/MyProject.git/': Failed to connect to 123.123.123.123 port 80: Connexion refused

请注意,当主题名称和目标主机名之间没有明显差异时,已检测到差异。

  1. 我将来自 Gitlab 服务器的证书存储到本地.pem文件中(通过“ openssl s_client -connect”获得)。

  2. 在克隆之前导出或添加“ IT_SSL_CAINFO=/path/to/cert/certs.pem”不会改变行为。

  3. export GIT_SSL_NO_VERIFY=True” 调整有效(并在此处和其他博客/论坛上提到),但也在系统中创建了一个漏洞(并且有点讨论使用 HTTPS 的点:-p),所以我不想依赖在上面。

  4. 如果我停用 SSL 验证,然后克隆,然后重新激活 SSL 验证,并尝试拉或推,我会得到相同的行为。

  5. openssl s_client -connect 123.123.123.123:443”的结果(对不起格式,我似乎无法正确)(编辑:我使用此命令在本地获取证书,方法是将“BEGIN CERTIFICATE”行复制到“END CERTIFICATE”行我的本地 .pem 文件):

    CONNECTED(00000003) 深度=0 CN = 123.123.123.123 验证返回:1

    证书链 0 s:/CN=123.123.123.123 i:/CN=123.123.123.123

    服务器证书 -----BEGIN CERTIFICATE----- [...] -----END CERTIFICATE----- subject=/CN=123.123.123.123 issuer=/CN=123.123.123.123

    未发送客户端证书 CA 名称对等签名摘要:SHA256 服务器临时密钥:ECDH、P-256、256 位

    SSL 握手已读取 1404 字节并写入 433 字节

    新,TLSv1/SSLv3,密码为 ECDHE-RSA-AES256-GCM-SHA384
    服务器公钥为 2048 位
    支持安全重新协商
    压缩:无
    扩展:无
    无 ALPN 协商SSL-
    会话:
    协议:TLSv1.2
    密码:ECDHE-RSA -AES256-GCM-SHA384
    会话 ID:[...]
    会话 ID-ctx:
    主密钥:[...]
    Key-Arg:无
    PSK 身份:无
    PSK 身份提示:无
    SRP 用户名:无
    TLS 会话票证生命周期提示:300(秒)
    TLS 会话票证:
    [...]

    开始时间:[...]
    超时:300(秒)
    验证返回码:0(正常)

  6. 服务器文件上我的 gitlab.rb 文件的内容:

    #================================================
    external_url "https ://123.123.123.123"

    gitlab_rails['object_store']['enabled'] = false
    gitlab_rails['object_store']['connection'] = {}
    gitlab_rails['object_store']['storage_options'] = {}
    gitlab_rails['object_store']['proxy_download '] = false
    gitlab_rails['object_store']['objects']['artifacts']['bucket'] = nil
    gitlab_rails['object_store']['objects']['external_diffs']['bucket'] = nil
    gitlab_rails['object_store']['objects']['lfs']['bucket'] = nil
    gitlab_rails['object_store']['objects']['uploads']['bucket'] = nil
    gitlab_rails['object_store ']['对象']['包']['桶'] = nil
    gitlab_rails['object_store']['objects']['dependency_proxy']['bucket'] = nil
    gitlab_rails['object_store']['objects']['terraform_state']['bucket'] = nil

    Letencrypt['enable'] = false
    #========================================== =====

  7. 我的本地 .git/config 文件的内容:

    #================================================
    [核心]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    [remote "origin"]
    url = https://123.123.123.123/MyName/MyProject.git
    fetch = +refs/heads/ :refs/remotes/origin/
    [branch" master"]
    remote = origin
    merge = refs/heads/master
    [http]
    sslVerify = true
    sslCAPath = /path/to/cert/certs.pem
    #================== ==============================

标签: gitsslgitlab

解决方案


推荐阅读