内网有多个服务,这些服务的https证书都通过根证书签发的,之前的做法是每个服务单独签发一个对应子域名的证书,现在将所有服务迁移到k8s中之后,也想着创建一个通配符证书,给k8s中所有ingress服务一个出口。

Prerequisite

括号内的为变量名,会在下面的命令中用到

  • 根证书(CACERT):ca.crt
  • 根证书key(CAKEY):ca.key

Optional

  • 扩展配置文件:custom.ext

创建CSR(Certificate Signing Request)

1
2
CSR=/tmp/somedomain.csr
openssl req -new -key $CAKEY -out $CSR -subj "/C=<Coutry Name>/ST=<Province Name>/L=<Locality Name>/O=<Organization Name>/OU=<Organizational Unit Name>/CN=somedomain"

在这里说明一下-subj中的几个section:

  • C(Coutry Name),国家代码,两个字符,如CN;
  • ST(State or Province Name),省(州)名,如GuangDong;
  • L(Locality Name),地区名,如ShenZhen;
  • O(Organization Name),组织名,如Internet Widgits Pty Ltd
  • OU(Organizational Unit Name),组织单元名,可以忽略;
  • CN(Common Name),要签署的域名,如*.local.site

举个例子

1
-subj "/C=CN/ST=GuangDong/L=Shenzhen/O=alibaba, ltd/OU=abc/CN=somedomain.com"

用CSR创建证书

1
openssl x509 -req -days 3650 -in $CSR -CA $CACERT -CAkey $CAKEY  -CAcreateserial -out $OUTCERT -extfile $EXT