Linux环境下GitLab配置SSL证书完整步骤
gitlab.example.com);# 创建SSL证书目录并设置权限
sudo mkdir -p /etc/gitlab/ssl
sudo chmod 700 /etc/gitlab/ssl
# 生成私钥(2048位,交互式输入密码)
sudo openssl genrsa -des3 -out /etc/gitlab/ssl/gitlab.key 2048
# 生成证书签名请求(CSR,填写域名等信息)
sudo openssl req -new -key /etc/gitlab/ssl/gitlab.key -out /etc/gitlab/ssl/gitlab.csr
# 移除私钥密码(避免GitLab启动时需手动输入)
sudo cp /etc/gitlab/ssl/gitlab.key /etc/gitlab/ssl/gitlab.key.org
sudo openssl rsa -in /etc/gitlab/ssl/gitlab.key.org -out /etc/gitlab/ssl/gitlab.key
sudo rm /etc/gitlab/ssl/gitlab.key.org
# 生成自签名证书(有效期10年)
sudo openssl x509 -req -days 3650 -in /etc/gitlab/ssl/gitlab.csr -signkey /etc/gitlab/ssl/gitlab.key -out /etc/gitlab/ssl/gitlab.crt
# 可选:生成DH参数(增强安全性)
sudo openssl dhparam -out /etc/gitlab/ssl/dhparams.pem 2048
# 安装Certbot及Nginx插件(以CentOS为例)
sudo yum install epel-release -y
sudo yum install certbot python2-certbot-nginx -y
# 获取证书(替换为你的域名)
sudo certbot --nginx -d gitlab.example.com -d www.gitlab.example.com
# 证书会自动保存到/etc/letsencrypt/live/gitlab.example.com/目录
# 包含:fullchain.pem(证书链)、privkey.pem(私钥)
注:Certbot会自动配置Nginx监听443端口,无需手动修改Nginx配置。
编辑GitLab主配置文件/etc/gitlab/gitlab.rb:
sudo vim /etc/gitlab/gitlab.rb
修改以下关键配置(以Let’s Encrypt证书为例,自签名证书替换对应路径即可):
# 设置外部访问URL为HTTPS
external_url 'https://gitlab.example.com'
# 启用HTTPS重定向(可选但推荐)
nginx['redirect_http_to_https'] = true
# 指定SSL证书路径
nginx['ssl_certificate'] = "/etc/letsencrypt/live/gitlab.example.com/fullchain.pem"
nginx['ssl_certificate_key'] = "/etc/letsencrypt/live/gitlab.example.com/privkey.pem"
# 可选:优化SSL协议和加密套件(提升安全性)
nginx['ssl_protocols'] = "TLSv1.2 TLSv1.3"
nginx['ssl_ciphers'] = "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:!DSS"
若使用自签名证书,将ssl_certificate和ssl_certificate_key路径改为自签名证书的路径(如/etc/gitlab/ssl/gitlab.crt和/etc/gitlab/ssl/gitlab.key)。
# 重新配置GitLab(应用配置变更)
sudo gitlab-ctl reconfigure
# 重启GitLab服务
sudo gitlab-ctl restart
# 检查服务状态(确保无错误)
sudo gitlab-ctl status
注:若修改了
external_url,可能需要等待几分钟让GitLab同步配置。
https://gitlab.example.com,确认浏览器地址栏显示安全锁图标(无混合内容警告);curl检查证书信息:curl -vI https://gitlab.example.com
输出中应包含SSL certificate verify ok或证书有效期等信息。Let’s Encrypt证书有效期为90天,Certbot会自动添加cron任务续订。可手动测试续订流程:
# 测试续订(不会实际替换证书)
sudo certbot renew --dry-run
# 若测试通过,续订后会自动重启Nginx(GitLab会同步加载新证书)
sudo certbot renew
注:GitLab无需额外操作,因Nginx重启后会自动加载新的证书文件。
/etc/gitlab/gitlab.rb中的证书路径是否存在,且权限为600(私钥文件);sudo lsof -i:443);sudo gitlab-ctl reconfigure重新应用配置,再重启服务。