1、问题起源
今天在使用docker推镜像提示证书问题,查看是harbor的自签名证书过期了,报错如下
由于harbor是使用helm部署,以容器方式运行在k8s集群中,无法直接修改证书信息,需要通过更新secret更新证书
2、生成自签名证书
X.509证书包含三个文件:key,csr,crt
-
key是服务器上的私钥文件,用于对发送给客户端数据的加密,以及对从客户端接收到数据的解密
-
csr是证书签名请求文件,用于提交给证书颁发机构(CA)对证书签名
-
crt是由证书颁发机构(CA)签名后的证书,或者是开发者自签名的证书,包含证书持有人的信息,持有人的公钥,以及签署者的签名等信息
备注:在密码学中,X.509是一个标准,规范了公开秘钥认证、证书吊销列表、授权凭证、凭证路径验证算法等
2.1、创建存放证书路径
mkdir -p /data/cert && cd /data/cert
2.2、创建 CA 根证书
openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 365 -out ca.crt -subj "/C=CN/L=zhejiang/O=lisea/CN=harbor-registry"
#-days指定过期时间
2.3、生成一个证书签名, 设置访问域名为 kevinharbor.com
openssl req -newkey rsa:4096 -nodes -sha256 -keyout kevinharbor.com.key -out server.csr -subj "/C=CN/L=zhejiang/O=lisea/CN=kevinharbor.com"
2.4、生成主机的证书
openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out kevinharbor.com.crt
3、更新secret
3.1、获取原始secret文件
helm get manifest xxx #找到Secret相关字段如下
apiVersion: v1
kind: Secret
metadata:
name: xxx-harbor-nginx
labels:
heritage: Helm
release: xxx
chart: harbor
app: "harbor"
type: Opaque
data:
tls.crt: "..."
tls.key: "..."
ca.crt: "..."
3.2、使用base64加密自签名证书
3.3、更新secret文件
kubectl create -f secret.yaml
3.4、更新docker依赖的证书即可