返回列表 发布新帖

GitLab 如何使用SSL自签证书

345 0
发表于 2024-4-16 21:27:03 | 显示全部楼层 阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

×

本帖最后由 ALEX 于 2024-4-17 13:16 编辑

本文介绍如何生成 SSL 自签证书,以及如何配置 GitLab 使用 SSL 自签证书。

除非有特殊要求,否则一般建议使用知名 CA 机构颁发的可信 SSL 证书(在阿里云、腾讯云可以申请免费颁发一年可信SSL 证书),可以避免很多环节非常多的证书信任问题。

1. CA根证书生成

  1. 生成ca的私钥 (key 文件)
sudo openssl genrsa -out ca.key 2048
  1. 生成ca证书签名请求文件 (csr 文件)

ca.csr文件是证书签名请求(CSR,Certificate Signing Request)文件,它是向证书颁发机构(CA,Certificate Authority)请求数字证书的一种标准格式。在生成数字证书之前,需要先生成一个CSR文件,并将其发送给CA机构进行审核和签名。签名后的数字证书将包含公钥和一些与该公钥相关的信息,例如证书持有者的名称和证书有效期等。

通常,生成CSR文件需要先生成一对公钥和私钥。私钥将保留在请求者的计算机上,而公钥将包含在CSR文件中,一起提交给CA机构。CSR文件还包含有关请求者的一些信息,例如名称、电子邮件地址和机构名称等。

在使用CA机构颁发的数字证书时,常常需要使用 ca.csr文件,因为它包含有关证书的重要信息。例如,如果您要将SSL证书安装到Web服务器上,那么您需要将CSR文件提交给证书颁发机构,并在签名后将签名后的数字证书安装到Web服务器上。

ca.conf:

[ req ]
default_bits       = 2048
distinguished_name = req_distinguished_name

[ req_distinguished_name ]
countryName                 = Country Name (2 letter code)
countryName_default         = CN
stateOrProvinceName         = State or Province Name (full name)
stateOrProvinceName_default = SiChuan
localityName                = Locality Name (eg, city)
localityName_default        = ChengDu
organizationName            = Organization Name (eg, company)
organizationName_default    = tgy-org
commonName                  = Common Name (e.g. server FQDN or YOUR name)
commonName_max              = 64
commonName_default          = ssl.taogy.top  

生成ca证书签发请求,得到ca.csr

sudo openssl req -new -sha256 -out ca.csr -key ca.key -config ca.conf

配置文件中已经有默认值了,shell交互时一路回车就行。

3.生成证书文件 (crt 文件)

sudo openssl x509 -req -days 90 -in ca.csr -signkey ca.key -out ca.crt

2. 用户证书生成

  1. 生成服务端的私钥
sudo openssl genrsa -out ssl.taogy.top.key 2048
  1. 生成服务端证书请求文件
vim ssl.taogy.top.conf
[req]
distinguished_name = req_distinguished_name
req_extensions = req_ext

[req_distinguished_name]
countryName = Country Name (2 letter code)
countryName_default = CN
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = SiChuan
localityName = Locality Name (eg, city)
localityName_default = ChengDu
organizationName = Organization Name (eg, company)
organizationName_default = tgy-org
organizationalUnitName  = Organizational Unit Name (eg, section)
organizationalUnitName_default  = tgy-org
commonName = Common Name (e.g. server FQDN or YOUR name)
commonName_default = ssl.taogy.top
commonName_max  = 64

[req_ext]
basicConstraints = CA:TRUE
subjectAltName = @alt_names

[alt_names]
DNS = ssl.taogy.top
IP =  43.156.32.207
sudo openssl req -new -sha256 -out ssl.taogy.top.csr -key ssl.taogy.top.key -config ssl.taogy.top.conf
  1. 根据先前生成的 SSL/TLS 证书签名请求(CSR),生成新的自签名证书:

    sudo openssl x509 \
      -req \
      -days 365 \
      -CA ca.crt \
      -CAkey ca.key \
      -CAcreateserial \
      -in ssl.taogy.top.csr \
      -out ssl.taogy.top.crt \
      -extensions req_ext \
      -extfile ssl.taogy.top.conf
    • x509 表示使用 X.509 证书格式。
    • -req 表示使用证书签名请求(CSR)文件作为输入。
    • -days 365 表示证书的有效期为 365 天。
    • -CA ca.crt 表示使用名为 ca.crt 的根证书作为证书颁发机构(CA)证书。
    • -CAkey ca.key 表示使用名为 ca.key 的根证书私钥作为签名密钥。
    • -CAcreateserial 表示创建一个序列号文件用于标识该证书。
    • -in ssl.taogy.top.csr 表示输入证书签名请求文件的路径。
    • -out ssl.taogy.top.crt 表示输出生成的证书文件的路径。
    • -extensions req_ext 表示在生成的证书中添加扩展信息。
    • -extfile ssl.taogy.top.conf 表示指定一个包含扩展信息的配置文件。
  2. 游览器导入CA根证书

    1. 双击.crt文件,以将其安装到您的Keychain访问工具中。

    2. 在Keychain访问工具中,找到您刚刚安装的证书,右键单击它,然后选择“获取信息”。

    3. 展开“信任”部分,将“使用此证书时”设置为“始终信任”。

    4. 关闭“证书信息”窗口,您的自签名证书现在应该在Chrome浏览器中得到信任。

      据说有用,实际测试下来chrome游览器还是报错

    cp ssl.taogy.top.crt /etc/pki/ca-trust/source/anchors/
    sudo update-ca-trust

3. gitlab配置

  1. gitlab.rb:

    external_url 'https://ssl.taogy.top'
    letsencrypt['enable'] = false
  2. 创建目录、复制证书

    sudo mkdir -p /etc/gitlab/ssl
    sudo chmod 755 /etc/gitlab/ssl
    sudo cp ssl.taogy.top.key ssl.taogy.top.crt /etc/gitlab/ssl/
  3. 初始化:

    sudo gitlab-ctl reconfigure

4. 报错:

  • failed to update database TXT_DB error number 2

这个也是bug,三个方法

产生的原因是: This thing happens when certificates share common data. You cannot have two certificates that look otherwise the same. 方法一: 修改demoCA下 index.txt.attr 将unique_subject = yes改为unique_subject = no 方法二: 删除demoCA下的index.txt,并再touch下rm index.txt touch index.txt 方法三: 将 common name设置成不同的

  • shell runner报错:

    couldn't execute POST against https://ssl.taogy.top/api/v4/runners: Post "https://demo.taogy.top/api/v4/runners": x509: certificate signed by unknown authority

    创建一个/etc/gitlab-runner/certs目录并将证书放到该目录下

5. 查看证书

查看证书server.crt到期时间

sudo openssl x509 -in ssl.taogy.top.crt -noout -dates

# output
notBefore=Mar 29 07:33:34 2023 GMT
notAfter=Mar 28 07:33:34 2024 GMT

runner使用自签证书:

sudo gitlab-runner register --url https://ssl.taogy.top/ --registration-token  <registration-token> --tls-ca-file=/etc/gitlab-runner/certs/ssl.taogy.top.crt

测试连接到ssl.taogy.top网站的SSL/TLS连接。

echo | openssl s_client -CAfile /etc/gitlab-runner/certs/ssl.taogy.top.crt -connect ssl.taogy.top:443

据说有用,实际测试下来chrome游览器还是报错

/etc/pki/ca-trust/source/anchors/
update-ca-trust

6. gitlab registry配置

参考:gitlab.rb:

registry_external_url 'https://ssl.taogy.top:5050'

Docker 服务器,将自签名证书添加到 Docker 引擎的信任证书列表中

sudo mkdir -p /etc/docker/certs.d/ssl.taogy.top:5050/
sudo cp ssl.taogy.top.crt /etc/docker/certs.d/ssl.taogy.top:5050/ssl.taogy.top.crt

测试

sudo docker login ssl.taogy.top:5050
回复

使用道具 举报

意见建议

Email:forum@gitlab.cn
  • 关注公众号
  • 添加专业顾问
Copyright © 2001-2024 极狐GitLab论坛 版权所有 All Rights Reserved. 鄂ICP备2021008419号-1|鄂公网安备42018502006137号
关灯 快速发帖
扫一扫添加专业顾问
返回顶部
快速回复 返回顶部 返回列表