更新时间:2025-08-26 GMT+08:00
分享

更新证书

功能介绍

更新ELB证书。不能更新证书类型,但可以更新证书内容和私钥等。

注意:更新证书会影响当前证书已关联的监听器,请谨慎操作。

接口约束

如果待更新证书的域名不为空,且被监听器使用;则不允许更新该证书的域名为空,否则系统会返回409响应。

调用方法

请参见如何调用API

URI

PUT /v3/{project_id}/elb/certificates/{certificate_id}

表1 路径参数

参数

是否必选

参数类型

描述

certificate_id

String

证书ID。

project_id

String

参数解释:项目ID。获取方式请参见获取项目ID

约束限制:不涉及

取值范围:长度为32个字符,由小写字母和数字组成。

默认取值:不涉及

请求参数

表2 请求Header参数

参数

是否必选

参数类型

描述

X-Auth-Token

String

参数解释:IAM鉴权Token。

约束限制:不涉及

取值范围:不涉及

默认取值:不涉及

表3 请求Body参数

参数

是否必选

参数类型

描述

certificate

UpdateCertificateOption object

参数解释:更新证书参数对象。

约束限制:不涉及

表4 UpdateCertificateOption

参数

是否必选

参数类型

描述

certificate

String

参数解释:证书内容。

支持最大11层证书链(含证书和证书链)。

约束限制:不涉及

取值范围:PEM编码格式,最大长度65536个字符。

默认取值:不涉及

description

String

参数解释:证书的描述。

约束限制:不涉及

取值范围:0-255个字符。

默认取值:不涉及

name

String

参数解释:证书的名称。

约束限制:不涉及

取值范围:0-255个字符。

默认取值:不涉及

private_key

String

参数解释:服务器证书的私钥。

约束限制:不涉及

取值范围:PEM编码格式,最大长度8192个字符。

默认取值:不涉及

domain

String

参数解释:服务器证书所签域名。

约束限制:该字段仅type为server时有效(其他类型证书,字段可传入,但不会生效)。

取值范围:总长度为0-10000,由若干普通域名或泛域名组成,域名之间以","分隔,不超过100个域名。

  • 普通域名:由若干字符串组成,字符串间以"."分隔,单个字符串长度不超过63个字符,只能包含英文字母、数字或"-",且必须以字母或数字开头和结尾。例:www.test.com。

  • 泛域名:在普通域名的基础上仅允许首字母为"*"。例:*.test.com。

默认取值:不涉及

enc_certificate

String

参数解释:服务器SM双证书的证书内容。

支持最大11层证书链(含证书和证书链)。

约束限制:仅当type为server_sm时,才支持传入。

取值范围:PEM编码格式。最大长度65536字符。

默认取值:不涉及

enc_private_key

String

参数解释:服务器SM双证书的私钥。

约束限制:仅当type为server_sm时,才支持传入。

取值范围:PEM编码格式,最大长度8192个字符。

默认取值:不涉及

scm_certificate_id

String

参数解释:云证书管理服务(CCM)中的证书ID。

约束限制:仅记录证书ID,不验证其是否真实存在云证书管理服务中。并且需要将云证书管理服务中对应证书的内容手动设置到当前接口相应字段中(可能涉及字段certificate、private_key、enc_certificate和enc_private_key)

取值范围:不涉及

默认取值:不涉及

source

String

参数解释:标记当前证书来源。

约束限制:无

取值范围

  • scm:表示关联云证书管理服务(CCM)中的证书。

  • 空值:表示自有证书。

默认取值:不涉及

protection_status

String

参数解释:修改保护状态

约束限制:不涉及

取值范围

  • nonProtection: 不保护

  • consoleProtection: 控制台修改保护

默认取值:不涉及

protection_reason

String

参数解释:设置修改保护的原因

约束限制:仅当protection_status为consoleProtection时有效

取值范围:不涉及

默认取值:空

响应参数

状态码:200

表5 响应Body参数

参数

参数类型

描述

request_id

String

参数解释:请求ID。

取值范围:由数字、小写字母和中划线(-)组成的字符串,自动生成。

certificate

CertificateInfo object

参数解释:ELB证书信息。注意:真正的证书在内层字段中。

表6 CertificateInfo

参数

参数类型

描述

admin_state_up

Boolean

参数解释:证书的管理状态。该字段当前无用,设置为true或者false都不影响证书使用。

取值范围

  • true:表示证书可用。

  • false:表示证书不可用。

certificate

String

参数解释:证书内容。支持最大11层证书链(含证书和证书链)。

取值范围:PEM编码格式,最大长度65536个字符。

description

String

参数解释:证书的描述。

取值范围:0-255个字符。

domain

String

参数解释:服务器证书所签域名。

取值范围:总长度为0-10000,由若干普通域名或泛域名组成,域名之间以","分隔,不超过100个域名。

  • 普通域名:由若干字符串组成,字符串间以"."分隔,单个字符串长度不超过63个字符,只能包含英文字母、数字或"-",且必须以字母或数字开头和结尾。例:www.test.com。

  • 泛域名:在普通域名的基础上仅允许首字母为"*"。例:*.test.com。

id

String

参数解释:ELB证书管理对象ID。

取值范围:由32位数字和小写字母组成。

name

String

参数解释:证书的名称。

取值范围:0-255个字符。

private_key

String

参数解释:服务器证书的私钥。

取值范围:PEM编码格式,最大长度8192个字符。

type

String

参数解释:证书的类型。

取值范围

  • server:服务器证书。

  • client:CA证书。

  • server_sm:服务器SM双证书。

created_at

String

参数解释:创建时间。

取值范围:格式:yyyy-MM-dd'T'HH:mm:ss'Z',UTC时区。

updated_at

String

参数解释:更新时间。

取值范围:格式:yyyy-MM-dd'T'HH:mm:ss'Z',UTC时区。

expire_time

String

参数解释:证书有效期的截止时间。

取值范围:格式:yyyy-MM-dd'T'HH:mm:ss'Z',UTC时区。

project_id

String

参数解释:项目ID。获取方式请参见获取项目ID

取值范围:长度为32个字符,由小写字母和数字组成。

enc_certificate

String

参数解释:服务器SM双证书的证书内容。

支持最大11层证书链(含证书和证书链)。

取值范围:PEM编码格式。最大长度65536字符。

enc_private_key

String

参数解释:服务器SM双证书的私钥。

取值范围:PEM编码格式,最大长度8192个字符。

scm_certificate_id

String

参数解释:云证书管理服务(CCM)中的证书ID。

取值范围:不涉及

common_name

String

参数解释:证书绑定的主域名。

取值范围:不涉及

fingerprint

String

参数解释:证书指纹。

取值范围:不涉及

subject_alternative_names

Array of strings

参数解释:证书绑定的域名列表。

取值范围:不涉及

source

String

参数解释:标记当前证书来源。

取值范围

  • scm:表示关联云证书管理服务(CCM)中的证书。

  • 空值:表示自有证书。

protection_status

String

参数解释:修改保护状态。

取值范围

  • nonProtection: 不保护

  • consoleProtection: 控制台修改保护,即禁止通过控制台修改。

protection_reason

String

参数解释:修改保护的原因。

取值范围:不涉及

请求示例

更新证书的名称和描述信息

PUT https://{ELB_Endpoint}/v3/99a3fff0d03c428eac3678da6a7d0f24/elb/certificates/233a325e5e3e4ce8beeb320aa714cc12

{
  "certificate" : {
    "name" : "My Certificate",
    "description" : "Update my Certificate."
  }
}

响应示例

状态码:200

操作正常返回。

{
  "certificate" : {
    "private_key" : "-----BEGIN PRIVATE KEY-----MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDQVAbOLe5xNf4M253Wn9vhdUzojetjv4J+B7kYwsMhRcgdcJ8KCnX1nfzTvI2ksXlTQ2o9BkpStnPetB4s32ZiJRMlk+61iUUMNsHwK2WBX57JT3JgmyVbH8GbmRY0+H3sH1i72luna7rMMD30gLh6QoP3cq7PGWcuZKV7hjd1tjCTQukwMvqV8Icq39buNpIgDOWzEP5AzqXtCOFYn6RTH5SRug4hKNN7sT1eYMslHu7wtEBDKVgrLjOCe/W2f8rLT1zEsoAW2ChlZAPYUBkl/0XuTWRg3CohPPcI+UtlRSfvLDeeQ460swjbwgS/RbJh3sIwlCRLU08kEo04Z9H/AgMBAAECggEAEIeaQqHCWZk/HyYN0Am/GJSGFa2tD60SXY2fUieh8/HlfvCArftGgMaYWPSNCJRMXB7tPwpQu19esjz4Z/cR2Je4fTLPrffGUsHFgZjv5OQBZVe4a5Hj1OcgJYhwCqPs2d9i2wToYNBbcfgh8lSETq8YaXngBO6vES9LMhHkNKKrciu9YkInNEHu6uRJ5g/eGGX3KQynTvVIhnOVGAJvjTXcoU6fm7gYdHAD6jk9lc9MEGpfYI6AdHIwFZcT/RNAxhP82lg2gUJSgAu66FfDjMwQXKbafKdP3zq4Up8a7AlekrguPtfV1vWklg+bUFhgGaiAEYTpAUN9t2DVIiijgQKBgQDnYMMsaF0r557CM1CTXUqgCZo8MKeV2jf2drlxRRwRl33SksQbzAQ/qrLdT7GP3sCGqvkxWY2FPdFYf8kxGcCeZPcIeZYCQAM41pjtsaM8tVbLWVR8UtGBuQoPSph7JNF3Tm/JH/fbwjpjP7dtJ7n8EzkRUNE6aIMHOFEeych/PQKBgQDmf1bMogx63rTcwQ0PEZ9Vt7mTgKYK4aLriWgTWHXPZxUQaYhpjXo6+lMI6DpExiDgBAkMzJGIvS7yQiYWU+wthAr9urbWYdGZlS6VjoTkF6r7VZoILXX0fbuXh6lm8K8IQRfBpJff56p9phMwaBpDNDrfpHB5utBUxs40yIdp6wKBgQC69Cp/xUwTX7GdxQzEJctYiKnBHKcspAg38zJf3bGSXU/jR4eB1lVQhELGI9CbKSdzKM71GyEImix/T7FnJSHIWlho1qVo6AQyduNWnAQD15pr8KAdXGXAZZ1FQcb3KYa+2fflERmazdOTwjYZ0tGqZnXkEeMdSLkmqlCRigWhGQKBgDak/735uP20KKqhNehZpC2dJei7OiIgRhCS/dKASUXHSW4fptBnUxACYocdDxtY4VhafI7FPMdvGl8ioYbvlHFh+X0Xs9r1S8yeWnHoXMb6eXWmYKMJrAoveLa+2cFm1Agf7nLhA4R4lqm9IpV6SKegDUkR4fxp9pPyodZPqBLLAoGBAJkD4wHW54Pwd4Ctfk9ojHjWB7pQlUYpTZO9dm+4fpCMn9Okf43AE2yAOaAP94GdzdDJkxfciXKcsYr9IIukfaoXgjKR7p1zERiWZuFF63SB4aiyX1H7IX0MwHDZQO38a5gZaOm/BUlGKMWXzuEd3fy+1rCUwzOp9LSjtJYf4ege-----END PRIVATE KEY-----",
    "description" : "Update my Certificate.",
    "domain" : null,
    "created_at" : "2019-03-31T22:23:51Z",
    "expire_time" : "2045-11-17T13:25:47Z",
    "id" : "233a325e5e3e4ce8beeb320aa714cc12",
    "name" : "My Certificate",
    "certificate" : "-----BEGIN CERTIFICATE-----MIIC4TCCAcmgAwIBAgICEREwDQYJKoZIhvcNAQELBQAwFzEVMBMGA1UEAxMMTXlDb21wYW55IENBMB4XDTE4MDcwMjEzMjU0N1oXDTQ1MTExNzEzMjU0N1owFDESMBAGA1UEAwwJbG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0FQGzi3ucTX+DNud1p/b4XVM6I3rY7+Cfge5GMLDIUXIHXCfCgp19Z3807yNpLF5U0NqPQZKUrZz3rQeLN9mYiUTJZPutYlFDDbB8CtlgV+eyU9yYJslWx/Bm5kWNPh97B9Yu9pbp2u6zDA99IC4ekKD93KuzxlnLmSle4Y3dbYwk0LpMDL6lfCHKt/W7jaSIAzlsxD+QM6l7QjhWJ+kUx+UkboOISjTe7E9XmDLJR7u8LRAQylYKy4zgnv1tn/Ky09cxLKAFtgoZWQD2FAZJf9F7k1kYNwqITz3CPlLZUUn7yw3nkOOtLMI28IEv0WyYd7CMJQkS1NPJBKNOGfR/wIDAQABozowODAhBgNVHREEGjAYggpkb21haW4uY29thwQKuUvJhwR/AAABMBMGA1UdJQQMMAoGCCsGAQUFBwMBMA0GCSqGSIb3DQEBCwUAA4IBAQA8lMQJxaTey7EjXtRLSVlEAMftAQPG6jijNQuvIBQYUDauDT4W2XUZ5wAnjiOyQ83va672K1G9s8n6xlH+xwwdSNnozaKzC87vwSeZKIOdl9I5I98TGKI6OoDaezmzCwQYtHBMVQ4c7Ml8554Ft1mWSt4dMAK2rzNYjvPRLYlzp1HMnI6hkjPk4PCZwKnha0dlScati9CCt3UzXSNJOSLalKdHErH08Iqd+1BchScxCfk0xNITn1HZZGmI+vbmunok3A2lucI14rnsrcbkGYqxGikySN6B2cRLBDK4Y3wChiW6NVYtVqcx5/mZiYsGDVN+9QBd0eYUHce+77s96i3I-----END CERTIFICATE-----",
    "admin_state_up" : true,
    "project_id" : "99a3fff0d03c428eac3678da6a7d0f24",
    "updated_at" : "2019-03-31T23:26:49Z",
    "type" : "server",
    "common_name" : "www.example.com",
    "fingerprint" : "869df7fcb441c2ef3fb9329437815972eeb1ef0e",
    "subject_alternative_names" : [ "www.example.com" ]
  },
  "request_id" : "d9abea6b-98ee-4ad4-8c5d-185ded48742f"
}

SDK代码示例

SDK代码示例如下。

更新证书的名称和描述信息

 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
50
51
52
53
54
package com.huaweicloud.sdk.test;

import com.huaweicloud.sdk.core.auth.ICredential;
import com.huaweicloud.sdk.core.auth.BasicCredentials;
import com.huaweicloud.sdk.core.exception.ConnectionException;
import com.huaweicloud.sdk.core.exception.RequestTimeoutException;
import com.huaweicloud.sdk.core.exception.ServiceResponseException;
import com.huaweicloud.sdk.elb.v3.region.ElbRegion;
import com.huaweicloud.sdk.elb.v3.*;
import com.huaweicloud.sdk.elb.v3.model.*;


public class UpdateCertificateSolution {

    public static void main(String[] args) {
        // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
        // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
        String ak = System.getenv("CLOUD_SDK_AK");
        String sk = System.getenv("CLOUD_SDK_SK");
        String projectId = "{project_id}";

        ICredential auth = new BasicCredentials()
                .withProjectId(projectId)
                .withAk(ak)
                .withSk(sk);

        ElbClient client = ElbClient.newBuilder()
                .withCredential(auth)
                .withRegion(ElbRegion.valueOf("<YOUR REGION>"))
                .build();
        UpdateCertificateRequest request = new UpdateCertificateRequest();
        request.withCertificateId("{certificate_id}");
        UpdateCertificateRequestBody body = new UpdateCertificateRequestBody();
        UpdateCertificateOption certificatebody = new UpdateCertificateOption();
        certificatebody.withDescription("Update my Certificate.")
            .withName("My Certificate");
        body.withCertificate(certificatebody);
        request.withBody(body);
        try {
            UpdateCertificateResponse response = client.updateCertificate(request);
            System.out.println(response.toString());
        } catch (ConnectionException e) {
            e.printStackTrace();
        } catch (RequestTimeoutException e) {
            e.printStackTrace();
        } catch (ServiceResponseException e) {
            e.printStackTrace();
            System.out.println(e.getHttpStatusCode());
            System.out.println(e.getRequestId());
            System.out.println(e.getErrorCode());
            System.out.println(e.getErrorMsg());
        }
    }
}

更新证书的名称和描述信息

 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
# coding: utf-8

import os
from huaweicloudsdkcore.auth.credentials import BasicCredentials
from huaweicloudsdkelb.v3.region.elb_region import ElbRegion
from huaweicloudsdkcore.exceptions import exceptions
from huaweicloudsdkelb.v3 import *

if __name__ == "__main__":
    # The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
    # In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
    ak = os.environ["CLOUD_SDK_AK"]
    sk = os.environ["CLOUD_SDK_SK"]
    projectId = "{project_id}"

    credentials = BasicCredentials(ak, sk, projectId)

    client = ElbClient.new_builder() \
        .with_credentials(credentials) \
        .with_region(ElbRegion.value_of("<YOUR REGION>")) \
        .build()

    try:
        request = UpdateCertificateRequest()
        request.certificate_id = "{certificate_id}"
        certificatebody = UpdateCertificateOption(
            description="Update my Certificate.",
            name="My Certificate"
        )
        request.body = UpdateCertificateRequestBody(
            certificate=certificatebody
        )
        response = client.update_certificate(request)
        print(response)
    except exceptions.ClientRequestException as e:
        print(e.status_code)
        print(e.request_id)
        print(e.error_code)
        print(e.error_msg)

更新证书的名称和描述信息

 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
package main

import (
	"fmt"
	"github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic"
    elb "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/elb/v3"
	"github.com/huaweicloud/huaweicloud-sdk-go-v3/services/elb/v3/model"
    region "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/elb/v3/region"
)

func main() {
    // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
    // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
    ak := os.Getenv("CLOUD_SDK_AK")
    sk := os.Getenv("CLOUD_SDK_SK")
    projectId := "{project_id}"

    auth := basic.NewCredentialsBuilder().
        WithAk(ak).
        WithSk(sk).
        WithProjectId(projectId).
        Build()

    client := elb.NewElbClient(
        elb.ElbClientBuilder().
            WithRegion(region.ValueOf("<YOUR REGION>")).
            WithCredential(auth).
            Build())

    request := &model.UpdateCertificateRequest{}
	request.CertificateId = "{certificate_id}"
	descriptionCertificate:= "Update my Certificate."
	nameCertificate:= "My Certificate"
	certificatebody := &model.UpdateCertificateOption{
		Description: &descriptionCertificate,
		Name: &nameCertificate,
	}
	request.Body = &model.UpdateCertificateRequestBody{
		Certificate: certificatebody,
	}
	response, err := client.UpdateCertificate(request)
	if err == nil {
        fmt.Printf("%+v\n", response)
    } else {
        fmt.Println(err)
    }
}

更多编程语言的SDK代码示例,请参见API Explorer的代码示例页签,可生成自动对应的SDK代码示例。

状态码

状态码

描述

200

操作正常返回。

错误码

请参见错误码

相关文档