生成自签名泛域名证书
原创大约 3 分钟
本文介绍,在Linux环境下生成自签名泛域名
生成环境说明
以下命令在 Ubuntu 20.04 LTS 系统上测试
ubuntu@:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04 LTS
Release: 20.04
Codename: focal
泛域名介绍
泛域名(Wildcard Domain)是一种在域名系统(DNS)中使用的特殊类型的域名。通常,域名系统中的域名是指定了特定子域的,例如
example.com
或www.example.com
。但是,泛域名允许将所有子域名都指向同一个位置,而无需为每个子域名都配置单独的 DNS 记录。
泛域名的常见语法是使用星号(*)作为通配符,例如
*.example.com
。这意味着任何子域名,如foo.example.com
、bar.example.com
、xyz.example.com
等,都将指向相同的位置。
泛域名通常用于以下几种情况:
统一的网站访问:如果您希望所有子域名都指向同一个网站或服务,而不必为每个子域名都配置 DNS 记录,泛域名就非常有用。这样可以简化管理并节省时间。
动态子域名分配:某些应用程序可能会动态创建子域名,例如个人博客平台或多租户 SaaS 应用程序。使用泛域名可以让这些动态创建的子域名立即生效,而无需手动配置 DNS 记录。
测试和开发环境:在测试和开发过程中,可能需要创建多个临时子域名。使用泛域名可以简化测试环境的设置,例如
*.test.example.com
。
虽然泛域名提供了灵活性和便利性,但在使用时需要谨慎考虑安全性和隐私性问题。由于泛域名会匹配任何子域名,因此可能存在滥用的风险,例如恶意用户创建子域名来冒充您的网站或服务。因此,建议在使用泛域名时采取适当的安全措施,如限制子域名的使用范围、监控域名注册情况等。
背景
本实践由于要搭建K8S集群,系统众多,并且以https形式访问,所以需要生成泛域名证书
自签名生成泛域名证书操作步骤
假设主域名为
example.xxxx.com
,泛域名为*.example.xxxx.com
#Generate a Certificate Authority Certificate
openssl genrsa -out ca.key 4096
openssl req -x509 -new -nodes -sha512 -days 3650
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=*.example.xxxx.com"
-key ca.key
-out ca.crt
#Generate a Server Certificate
openssl genrsa -out example.xxxx.com.key 4096
openssl req -sha512 -new
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=*.example.xxxx.com"
-key example.xxxx.com.key
-out example.xxxx.com.csr
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=example.xxxx.com
DNS.2=www.example.xxxx.com
DNS.3=*.example.xxxx.com
EOF
openssl x509 -req -sha512 -days 3650
-extfile v3.ext
-CA ca.crt -CAkey ca.key -CAcreateserial
-in example.xxxx.com.csr
-out example.xxxx.com.crt
# 拷贝证书到指定目录(根据需要执行)
cp example.xxxx.com.crt /data/harbor/cert
cp example.xxxx.com.key /data/harbor/cert
openssl x509 -inform PEM -in example.xxxx.com.crt -out example.xxxx.com.cert
# nginx配置(根据需要执行)
mkdir -p /etc/docker/certs.d/nginx/certs/registry.example.xxxx.com/
cp example.xxxx.com.cert /etc/docker/certs.d/registry.example.xxxx.com/
cp example.xxxx.com.key /etc/docker/certs.d/registry.example.xxxx.com/
cp ca.crt /etc/docker/certs.d/registry.example.xxxx.com/