关于go+自建gitlab因证书问题无法go mod问题

关于go+自建gitlab因证书问题无法go mod问题

0x00 why?

最近在写go的项目,git上有现成的轮子,拿来二次开发一下在它基础上在造就行,没想到go 1.15.6弃用了X.509证书。。。。所以导致没有办法go mod,官方Release Notes是这样写的

CommonName 默认情况下,当不存在“使用者备用名称”时,将X.509证书上 的字段视为主机名的不推荐使用的旧行为现在被禁用。可以通过将值添加x509ignoreCN=0到GODEBUG 环境变量中来临时重新启用它。
请注意,如果CommonName主机名无效,则无论GODEBUG设置如何,它都将被忽略。无效名称包括那些带有字母,数字,连字符和下划线以外的任何字符的名称,以及带有空标签或结尾点的名称。

0x01 detail

x509: certificate relies on legacy Common Name field, use SANs or temporarily enable Common Name matching with GODEBUG=x509ignoreCN=0

1

x509: certificate signed by unknown authority)

2

SSL certificate problem: unable to get local issuer certificate

3

0x02 solve

想解决这个问题,有两种方法,一种是直接把轮子嵌套进去,另一种就是解决证书问题,好在gitlab咱们自己可以维护,前者工作量太大了, 我们只能硬着头皮解决证书问题。

  • 安装openssl
  • 如果你已经安装完openssl,需要拷贝openssl证书到/home下
sudo cp /etc/pki/tls/openssl.cnf /home
  • 编辑openssl.cnf取消req_extensions = v3_req 的注释,如下:
####################################################################
[ req ]
default_bits            = 2048
default_md              = sha256
default_keyfile         = privkey.pem
distinguished_name      = req_distinguished_name
attributes              = req_attributes
  #x509_extensions = v3_ca # The extentions to add to the self signed cert 取消这一行的注释

  # Passwords for private keys if not present they will be prompted for
  # input_password = secret
  # output_password = secret
  • 编辑[ v3_req ]模块与下面相同
  [ v3_req ]

  # Extensions to add to a certificate request

  basicConstraints = CA:FALSE
  keyUsage = nonRepudiation, digitalSignature, keyEncipherment
  subjectAltName = @alt_names

  [alt_names]
  IP = xx.xx.xx.xx
  • 生成SANs证书
openssl req -new -sha256 -key server.key \
    -subj "/C=CN/ST=Beijing/L=Beijing/O=xxTech/OU=xxx/CN=xx.xx.xx.xx" \
    -reqexts SAN -config openssl.cnf \
    <(printf "[SAN]\nsubjectAltName=IP:xx.xx.xx.xx")) \
    -out server.csr
openssl x509 -req -days 365000 \
    -in server.csr -CA server.crt -CAkey server.key -CAcreateserial \
    -extfile <(printf "subjectAltName=IP:xx.xx.xx.xx") \
    -out server.crt

里边的参数带xx的需要你改

  • 配置gitlab为ssl,编辑配置文件为如下:
  vim /etc/gitlab/gitlab.rb
  ... ...
  external_url 'https://xx.xx.xx.xx'

  nginx['redirect_http_to_https'] =true
  nginx['ssl_certificate'] = "/etc/gitlab/ssl/server.crt"
  nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/server.key"
... ...
  • 将刚刚生成的server.crtserver.key移动到gitlab配置里
sudo mv server.* /etc/gitlab/ssl/
  • 配置生效gitlab
gitlab-ctl reconfigure
gitlab-ctl restart
  • 第一个问题就解决完了,第二个问题,将生成的证书server.crt安装到你自己的电脑上
sudo cp server.crt /etc/ssl/certs
sudo trust extract-compat
  • 第三个问题,全局关闭git的ssl认证
git config --global http.sslVerify false

此时你再去go run就不会出现错误了,可以愉快的使用go+自建gitlab


服务器资源由ZeptoVM赞助

Partners Wiki IRC