You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在MicroK8s中如何为Let's Encrypt ClusterIssuer设置ECC384加密算法?

在MicroK8s中将Let's Encrypt ClusterIssuer切换为ECC384加密算法

完全可以实现,cert-manager原生支持配置ECC(椭圆曲线加密)类型的密钥,只需修改ClusterIssuer及相关证书配置即可完成切换,具体步骤如下:

1. 更新ClusterIssuer配置

在原有ClusterIssuer的spec.acme字段下添加privateKey配置,指定密钥算法为ECDSA、密钥大小为384。修改后的完整配置如下:

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-staging
  namespace: cert-manager
spec:
  acme:
    server: https://acme-staging-v02.api.letsencrypt.org/directory
    email: asdf@gmail.com
    privateKeySecretRef:
      name: letsencrypt-staging
    # 添加ECC密钥配置
    privateKey:
      algorithm: ECDSA
      size: 384
    solvers:
      - http01:
          ingress:
            class: public
---
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
  namespace: cert-manager
spec:
  acme:
    server: https://acme-v02.api.letsencrypt.org/directory
    email: asdf@gmail.com # 注:原配置中此处少了@符号,需修正
    privateKeySecretRef:
      name: letsencrypt-prod
    # 添加ECC密钥配置
    privateKey:
      algorithm: ECDSA
      size: 384
    solvers:
      - http01:
          ingress:
            class: public

应用修改后的配置:

kubectl apply -f your-clusterissuer-config.yaml

2. 删除旧的RSA密钥Secret

原ClusterIssuer关联的是RSA类型的密钥Secret,需要删除它让cert-manager重新生成ECC密钥:

kubectl delete secret letsencrypt-staging letsencrypt-prod -n cert-manager

3. 配置证书使用ECC密钥

场景1:手动创建Certificate资源

如果是通过Certificate资源申请证书,需在spec中添加privateKey配置:

apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: example-cert
  namespace: default
spec:
  secretName: example-cert-tls
  issuerRef:
    name: letsencrypt-prod
    kind: ClusterIssuer
  dnsNames:
    - example.com
    - www.example.com
  # 指定ECC密钥
  privateKey:
    algorithm: ECDSA
    size: 384

场景2:通过Ingress自动生成证书

如果用Ingress注解自动生成证书,需添加以下注解:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-ingress
  namespace: default
  annotations:
    cert-manager.io/cluster-issuer: "letsencrypt-prod"
    # 指定ECC密钥算法和大小
    cert-manager.io/private-key-algorithm: "ECDSA"
    cert-manager.io/private-key-size: "384"
spec:
  tls:
    - hosts:
        - example.com
        - www.example.com
      secretName: example-cert-tls
  rules:
    - host: example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: example-service
                port:
                  number: 80

4. 触发证书重新颁发

删除现有的证书Secret或Certificate资源,让cert-manager重新签发ECC证书:

# 删除证书Secret(以example-cert-tls为例)
kubectl delete secret example-cert-tls -n default

# 或者删除Certificate资源(如果是手动创建的)
kubectl delete certificate example-cert -n default

5. 验证证书类型

证书签发完成后,可通过以下命令验证密钥类型:

# 导出证书公钥并查看算法
kubectl get secret example-cert-tls -n default -o jsonpath='{.data.tls\.crt}' | base64 -d | openssl x509 -text -noout | grep "Public Key Algorithm"

正常输出应包含Public Key Algorithm: id-ecPublicKey,且下方会显示ASN1 OID: secp384r1,说明是ECC384类型的证书。

内容的提问来源于stack exchange,提问作者Myriadic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 17:15:23