为内部域名 git.k8s1.lan 创建 SSL 证书
下面是为内部域名创建自签名 SSL 证书的详细步骤。我将为你演示两种方法:简单方法和更专业的 CA 方法。
方法一:简单自签名证书(快速部署)
这种方法适合测试环境,直接为域名创建自签名证书。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| sudo mkdir -p /etc/gitlab/ssl cd /etc/gitlab/ssl
sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \ -keyout git.k8s1.lan.key \ -out git.k8s1.lan.crt \ -subj "/C=CN/ST=Beijing/L=Beijing/O=YourCompany/OU=IT/CN=git.k8s1.lan" \ -addext "subjectAltName=DNS:git.k8s1.lan"
sudo chmod 600 git.k8s1.lan.key git.k8s1.lan.crt sudo chown root:root git.k8s1.lan.key git.k8s1.lan.crt
|
方法二:创建私有 CA 并签发证书(推荐用于生产环境)
这种方法更专业,先创建自己的证书颁发机构(CA),然后用它来签发服务器证书。
步骤 1: 创建私有 CA
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| sudo mkdir -p /etc/gitlab/ssl/ca cd /etc/gitlab/ssl/ca
sudo openssl genrsa -out ca.key 4096
sudo openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 \ -out ca.crt \ -subj "/C=CN/ST=Beijing/L=Beijing/O=YourCompany/OU=IT Department/CN=YourCompany Internal CA"
sudo mkdir -p newcerts certs crl sudo touch index.txt echo 1000 | sudo tee serial
|
步骤 2: 创建服务器证书
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| cd /etc/gitlab/ssl
sudo openssl genrsa -out git.k8s1.lan.key 2048
sudo openssl req -new -key git.k8s1.lan.key \ -out git.k8s1.lan.csr \ -subj "/C=CN/ST=Beijing/L=Beijing/O=YourCompany/OU=IT/CN=git.k8s1.lan"
sudo tee git.k8s1.lan.ext > /dev/null <<EOF authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment subjectAltName = @alt_names
[alt_names] DNS.1 = git.k8s1.lan # 如果需要,可以添加更多域名 # DNS.2 = www.k8s1.lan EOF
sudo openssl x509 -req -in git.k8s1.lan.csr \ -CA ca.crt -CAkey ../ca/ca.key -CAcreateserial \ -out git.k8s1.lan.crt -days 3650 -sha256 \ -extfile git.k8s1.lan.ext
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| # 确保在 SSL 目录 cd /etc/gitlab/ssl
# 1. 检查并创建必要的目录结构 sudo mkdir -p ca cd /etc/gitlab/ssl
# 2. 如果 CA 文件不存在,重新创建 CA if [ ! -f "ca/ca.crt" ] || [ ! -f "ca/ca.key" ]; then echo "重新创建 CA..." cd ca sudo openssl genrsa -out ca.key 4096 sudo openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 \ -out ca.crt \ -subj "/C=CN/ST=Beijing/L=Beijing/O=YourCompany/OU=IT Department/CN=YourCompany Internal CA" cd .. fi
# 3. 生成服务器私钥(如果不存在) if [ ! -f "git.k8s1.lan.key" ]; then sudo openssl genrsa -out git.k8s1.lan.key 2048 fi
# 4. 创建证书签名请求(如果不存在) if [ ! -f "git.k8s1.lan.csr" ]; then sudo openssl req -new -key git.k8s1.lan.key \ -out git.k8s1.lan.csr \ -subj "/C=CN/ST=Beijing/L=Beijing/O=YourCompany/OU=IT/CN=git.k8s1.lan" fi
# 5. 创建扩展配置文件 sudo tee git.k8s1.lan.ext > /dev/null <<EOF authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment subjectAltName = @alt_names
[alt_names] DNS.1 = git.k8s1.lan EOF
# 6. 使用正确的路径签发证书 sudo openssl x509 -req -in git.k8s1.lan.csr \ -CA ca/ca.crt -CAkey ca/ca.key -CAcreateserial \ -out git.k8s1.lan.crt -days 3650 -sha256 \ -extfile git.k8s1.lan.ext
# 7. 验证生成的证书 sudo openssl x509 -in git.k8s1.lan.crt -text -noout
|
步骤 3: 验证证书
1 2 3 4 5
| sudo openssl x509 -in git.k8s1.lan.crt -text -noout
sudo openssl verify -CAfile /etc/gitlab/ssl/ca/ca.crt git.k8s1.lan.crt
|
配置系统信任 CA 证书
为了让系统信任你的私有 CA,需要将 CA 证书添加到系统信任存储中:
在 CentOS/RHEL 系统上:
1 2 3 4 5
| sudo cp /etc/gitlab/ssl/ca/ca.crt /etc/pki/ca-trust/source/anchors/
sudo update-ca-trust
|
在 Ubuntu/Debian 系统上:
1 2 3 4 5
| sudo cp /etc/gitlab/ssl/ca/ca.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates
|
配置 GitLab 使用新证书
现在按照之前的方案配置 GitLab:
1 2
| sudo vim /etc/gitlab/gitlab.rb
|
确保包含以下配置:
1 2 3 4
| external_url 'https://git.k8s1.lan' nginx['redirect_http_to_https'] = true nginx['ssl_certificate'] = "/etc/gitlab/ssl/git.k8s1.lan.crt" nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/git.k8s1.lan.key"
|
重新配置 GitLab:
1 2
| sudo gitlab-ctl reconfigure sudo gitlab-ctl restart
|
在客户端安装 CA 证书
为了让访问 GitLab 的其他机器(包括运行 Flux 的机器)信任你的证书,需要在那些机器上也安装 CA 证书:
1 2 3 4 5 6 7 8 9
|
sudo cp ca.crt /etc/pki/ca-trust/source/anchors/ sudo update-ca-trust
sudo cp ca.crt /usr/local/share/ca-certificates/ sudo update-ca-certificates
|
测试 HTTPS 连接
1 2 3 4 5
| curl -I https://git.k8s1.lan
curl -k https://git.k8s1.lan
|
重要提示
安全性:在生产环境中,请妥善保管 CA 私钥 (ca.key),最好将其存储在安全的离线位置。
证书更新:记得在证书过期前更新。你可以设置提醒,证书有效期为 10 年(3650 天)。
多域名支持:如果你的环境有多个域名,记得在 subjectAltName 部分添加所有需要的域名。
完成这些步骤后,你的 GitLab 实例就应该可以通过 HTTPS 访问了,Flux 也应该能够成功连接。
要在Windows上安装证书,使浏览器能正常访问 git.k8s1.lan,关键在于将您自签名的CA证书正确导入到系统的”受信任的根证书颁发机构”存储区。以下是详细步骤和注意事项。
🔧 获取证书文件
首先,您需要获取GitLab服务器使用的自签名CA证书文件(通常是 .crt 或 .pem 文件)。如果这个文件在Linux的GitLab服务器上,您需要将其传输到Windows电脑上。您可以使用以下几种方式:
- 使用SCP命令:通过命令行直接复制,例如
scp user@git.k8s1.lan:/etc/gitlab/ssl/ca/ca.crt C:\Users\YourName\Downloads\。
- 使用文件共享:如果配置了Samba或NFS共享,可以直接访问。
- 使用U盘:物理媒介拷贝。
- 通过电子邮件或即时通讯工具:如果证书文件不大,可以发送给自己。
请确保您获取的是根CA证书(ca.crt),而不是服务器的叶子证书(git.k8s1.lan.crt)。
📥 安装证书到Windows
证书文件准备好后,请按照以下步骤将其安装到Windows的信任存储区:
打开证书管理控制台:
- 按下
Win + R 键,输入 certlm.msc,然后按回车。这会打开”计算机证书”管理控制台。
导入证书:
- 在左侧窗格中,展开”受信任的根证书颁发机构“。
- 右键点击”证书“文件夹,然后选择”所有任务“ -> “导入…“。
- 这将打开”证书导入向导”。点击”下一步“。
选择证书文件:
- 点击”浏览“,找到并选择您之前下载或拷贝的
.crt 文件。在文件类型下拉菜单中,确保选择”X.509 证书 (.cer;.crt)“以便找到您的文件。
- 选中文件后,点击”下一步“。
选择证书存储:
- 确保证书被放置在”受信任的根证书颁发机构“存储区。 直接点击”下一步“。
完成导入:
- 确认设置无误,点击”完成“。
- 系统可能会弹出一个安全警告,询问您是否确实要安装此证书。因为这是您自己的CA证书,请确认其指纹信息无误后,点击”是“。
🔍 验证与访问
证书安装完成后,建议进行以下操作以确保一切正常:
- 重启浏览器:完全关闭所有浏览器窗口,然后重新打开。
- 测试访问:在浏览器地址栏中输入
https://git.k8s1.lan 并访问。之前提示的证书错误应该已经消失。
- 备用验证方法:如果仍有问题,可以打开”命令提示符”或”PowerShell”,尝试使用以下命令测试连接(这会忽略证书错误,但可以检查连通性):
1
| curl -k https://git.k8s1.lan
|
如果能返回数据,说明网络和服务是通的,问题可能仍出在证书安装环节。
🛠️ 故障排除
如果安装证书后问题依旧,可以检查以下几点:
- 确认安装位置:务必确保证书被导入到了”受信任的根证书颁发机构“,而不是”中间证书颁发机构”或个人存储区。
- 清除浏览器缓存:有时浏览器会缓存旧的证书信息。尝试清除SSL状态和浏览器缓存。
- 在Windows搜索中输入”Internet 选项“。
- 进入”内容“选项卡,点击”清除 SSL 状态“。
- 在”常规“选项卡下,点击”浏览历史记录“下的”删除…“,临时文件、Cookie和缓存都清理一下。
- 检查系统时间:确保Windows系统的日期和时间是准确的,不正确的系统时间也会导致SSL证书验证失败。
- 尝试其他浏览器:用系统自带的Edge或IE浏览器测试,看是否是特定浏览器的问题。
希望这些步骤能帮助您顺利解决问题!如果还有其他疑问,随时可以再问我。
在Ubuntu安装证书:
sudo scp user@git.k8s1.lan:/etc/gitlab/ssl/ca/ca.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates