内部域名配置CA证书.md

为内部域名 git.k8s1.lan 创建 SSL 证书

下面是为内部域名创建自签名 SSL 证书的详细步骤。我将为你演示两种方法:简单方法和更专业的 CA 方法。

方法一:简单自签名证书(快速部署)

这种方法适合测试环境,直接为域名创建自签名证书。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 创建 SSL 证书目录
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
# 创建 CA 目录结构
sudo mkdir -p /etc/gitlab/ssl/ca
cd /etc/gitlab/ssl/ca

# 生成 CA 私钥
sudo openssl genrsa -out ca.key 4096

# 生成 CA 根证书
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
# 返回到 SSL 目录
cd /etc/gitlab/ssl

# 生成服务器私钥
sudo openssl genrsa -out git.k8s1.lan.key 2048

# 创建证书签名请求 (CSR)
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

# 使用 CA 签发服务器证书
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
# 复制 CA 证书到系统信任目录
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
# 复制 CA 证书到系统信任目录
sudo cp /etc/gitlab/ssl/ca/ca.crt /usr/local/share/ca-certificates/

# 更新信任存储
sudo update-ca-certificates

配置 GitLab 使用新证书

现在按照之前的方案配置 GitLab:

1
2
# 编辑 GitLab 配置
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
# 将 ca.crt 复制到客户端机器,然后执行相应操作

# 对于 CentOS/RHEL:
sudo cp ca.crt /etc/pki/ca-trust/source/anchors/
sudo update-ca-trust

# 对于 Ubuntu/Debian:
sudo cp ca.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates

测试 HTTPS 连接

1
2
3
4
5
# 测试 HTTPS 连接
curl -I https://git.k8s1.lan

# 如果遇到证书问题,可以暂时跳过验证进行测试
curl -k https://git.k8s1.lan

重要提示

  1. 安全性:在生产环境中,请妥善保管 CA 私钥 (ca.key),最好将其存储在安全的离线位置。

  2. 证书更新:记得在证书过期前更新。你可以设置提醒,证书有效期为 10 年(3650 天)。

  3. 多域名支持:如果你的环境有多个域名,记得在 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的信任存储区:

  1. 打开证书管理控制台

    • 按下 Win + R 键,输入 certlm.msc,然后按回车。这会打开”计算机证书”管理控制台。
  2. 导入证书

    • 在左侧窗格中,展开”受信任的根证书颁发机构“。
    • 右键点击”证书“文件夹,然后选择”所有任务“ -> “导入…“。
    • 这将打开”证书导入向导”。点击”下一步“。
  3. 选择证书文件

    • 点击”浏览“,找到并选择您之前下载或拷贝的 .crt 文件。在文件类型下拉菜单中,确保选择”X.509 证书 (.cer;.crt)“以便找到您的文件。
    • 选中文件后,点击”下一步“。
  4. 选择证书存储

    • 确保证书被放置在”受信任的根证书颁发机构“存储区。 直接点击”下一步“。
  5. 完成导入

    • 确认设置无误,点击”完成“。
    • 系统可能会弹出一个安全警告,询问您是否确实要安装此证书。因为这是您自己的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