本帖最后由 ALEX 于 2024-4-17 13:16 编辑
本文介绍如何生成 SSL 自签证书,以及如何配置 GitLab 使用 SSL 自签证书。
除非有特殊要求,否则一般建议使用知名 CA 机构颁发的可信 SSL 证书(在阿里云、腾讯云可以申请免费颁发一年可信SSL 证书),可以避免很多环节非常多的证书信任问题。
1. CA根证书生成
- 生成ca的私钥 (key 文件)
sudo openssl genrsa -out ca.key 2048
- 生成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. 用户证书生成
- 生成服务端的私钥
sudo openssl genrsa -out ssl.taogy.top.key 2048
- 生成服务端证书请求文件
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
-
根据先前生成的 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
表示指定一个包含扩展信息的配置文件。
-
游览器导入CA根证书
-
双击.crt文件,以将其安装到您的Keychain访问工具中。
-
在Keychain访问工具中,找到您刚刚安装的证书,右键单击它,然后选择“获取信息”。
-
展开“信任”部分,将“使用此证书时”设置为“始终信任”。
-
关闭“证书信息”窗口,您的自签名证书现在应该在Chrome浏览器中得到信任。
据说有用,实际测试下来chrome游览器还是报错
cp ssl.taogy.top.crt /etc/pki/ca-trust/source/anchors/
sudo update-ca-trust
3. gitlab配置
-
gitlab.rb
:
external_url 'https://ssl.taogy.top'
letsencrypt['enable'] = false
-
创建目录、复制证书
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/
-
初始化:
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设置成不同的
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