边缘安全
  • 概述
  • DDoS 防护
    • DDoS 防护概述
    • 使用独立 DDoS 防护
    • 配置独立 DDoS 防护策略
      • 调整 DDoS 防护等级
      • 独立 DDoS 攻击流量告警
      • 配置 IP 黑白名单
      • 配置区域封禁
      • 配置端口过滤
      • 配置特征过滤
      • 配置协议封禁
      • 配置连接类攻击防护
      • 相关参考
        • 处置方式
        • 相关概念介绍
  • Web 防护
    • 概述
    • 配置Web防护策略
    • 托管规则
    • CC 攻击防护
    • 带宽滥用防护
    • 自定义规则
    • 自定义速率限制规则
    • 防护例外规则
    • 托管定制规则
    • Web 安全监控告警
    • 相关参考
      • Web 防护请求处理顺序
      • 处置方式
      • 匹配条件
  • Bot 管理
    • 概述
    • Bot 智能分析
    • Bot 基础特征管理
    • 客户端画像分析
    • 主动特征识别
    • 自定义 Bot 规则
    • Bot 管理例外规则
    • 相关参考
      • 处置方式
  • 策略模板
  • IP 和网段分组
  • 源站防护
  • 自定义响应页面
  • 告警通知推送
  • SSL/TLS
    • 概述
    • 部署/更新 SSL 托管证书至 EdgeOne 域名
    • 使用免费证书部署至 EdgeOne 域名
    • 双向认证
    • HTTPS 配置
      • 强制 HTTPS 访问
      • 启用 HSTS
      • SSL/TLS 安全配置
        • 配置 SSL/TLS 安全等级
        • TLS 版本及密码套件说明
      • 开启 OCSP 装订
    • 引用
      • 使用OpenSSL生成自签名证书
      • 证书格式要求
    • 使用无密钥证书

使用OpenSSL生成自签名证书

所有的服务端和客户端证书一般情况下都需要向权威 CA 证书机构去申请,以保障能够被不同的操作系统和浏览器信任,CA 机构一般会收取一定的证书费用。如果您当前只是需要一本 HTTPS 证书进行测试使用,或者在企业内部使用,也可以自行通过 OpenSSL 颁发自签名证书。参考步骤如下:
RSA 算法证书
ECC 算法证书

步骤一:生成根证书

1. 通过以下命令创建根证书私钥,以生成 4096 密钥长度的 RSA 证书为例,将生成的私钥保存为 ca-rsa.key 文件。
openssl genrsa -out ca-rsa.key 4096
2. 使用以上证书私钥生成证书签名请求文件(CSR),保存为 ca-rsa.csr,以下命令通过 -subj 指定了证书的基本信息,其中:
C=CN 代表国家。
ST=State 代表省份。
L=City 代表城市。
O= Example Org 代表组织。
OU=Example CA 代表部门。
CN=Example Root CA 代表该证书的通用名称,在 CA 证书中,该字段可描述 CA 用途。如果是域名证书,需要在该字段指定证书签发的域名。
openssl req -new -key ca-rsa.key -out ca-rsa.csr -subj "/C=US/ST=State/L=City/O=Example Org/OU=Example CA/CN=Example Root CA"
3. 根据证书的签名请求文件,创建根证书公钥,有效期为 3650 天,保存为 ca-rsa.crt。其中 -extfile 中指定了该证书为 CA 证书。
openssl x509 -req -in ca-rsa.csr -out ca-rsa.crt -signkey ca-rsa.key -days 3650 -sha256 -extfile <(printf "basicConstraints=critical,CA:TRUE\nkeyUsage=critical,keyCertSign,cRLSign\nsubjectKeyIdentifier=hash\n")
4. 签发完成后,验证该证书是否为 CA 证书。
openssl x509 -in ca-rsa.crt -noout -text | grep -A2 "X509v3 Basic Constraints"
输出结果中,包含有 CA:TRUE 则为正确的 CA 证书。参考输出结果如下:
X509v3 Basic Constraints: critical
CA:TRUE # 代表该证书为 CA 证书。
X509v3 Key Usage: critical

步骤二:签发域名证书

以签发一本指定域名 www.example.com 的证书为例,您可以通过以上生成的 CA 证书,开始自签发域名证书:
1. 通过以下命令创建证书私钥,以生成 4096 密钥长度的 RSA 证书为例,将生成的私钥保存为 rsa-domain.key 文件。
openssl ecparam -name secp384r1 -genkey -noout -out rsa-domain.key
2. 使用以上证书私钥生成证书签名请求文件(CSR),保存为 rsa-domain.csr,以下命令通过 -subj 指定了证书的基本信息, 请注意将 CN 字段内容替换为你想签发的域名,本示例中以 www.example.com 为例。
openssl req -new -key rsa-domain.key -out rsa-domain.csr -subj "/C=US/ST=State/L=City/O=Example Org/OU=Example CA/CN=www.example.com"
3. 使用 CA 证书签名,生成域名证书公钥,有效期为 3650 天,保存为 rsa-domain.crt
openssl x509 -req -in rsa-domain.csr -out rsa-domain.crt -CA ca-rsa.crt -CAkey ca-rsa.key -days 3650
4. 对比 CA 证书和域名证书公钥,验证签发后的域名证书的证书链是否正确。
openssl verify -CAfile ca-rsa.crt rsa-domain.crt
输出结果中,如果显示 rsa-domain.crt:OK,则说明该证书签发链路正确。参考如下:
rsa-domain.crt: OK

步骤一:生成根证书

1. 通过以下命令创建根证书私钥,以生成 secp384r1 加密算法的 ECC 证书为例,将生成的私钥保存为 ca-ecc.key 文件。
openssl ecparam -name secp384r1 -genkey -noout -out ca-ecc.key
2. 使用以上证书私钥生成证书签名请求文件(CSR),保存为 ca-ecc.csr,以下命令通过 -subj 指定了证书的基本信息,其中:
C=CN 代表国家。
ST=State 代表省份。
L=City 代表城市。
O= Example Org 代表组织。
OU=Example CA 代表部门。
CN=Example Root CA 代表该证书的通用名称,在 CA 证书中,该字段可描述 CA 用途。如果是域名证书,需要在该字段指定证书签发的域名。
openssl req -new -key ca-ecc.key -out ca-ecc.csr -subj "/C=US/ST=State/L=City/O=Example Org/OU=Example CA/CN=Example Root CA"
3. 根据证书的签名请求文件,创建根证书公钥,有效期为 3650 天,保存为 ca-ecc.crt。其中 -extfile 中指定了该证书为 CA 证书。
openssl x509 -req -in ca-ecc.csr -out ca-ecc.crt -signkey ca-ecc.key -days 3650 -sha256 -extfile <(printf "basicConstraints=critical,CA:TRUE\nkeyUsage=critical,keyCertSign,cRLSign\nsubjectKeyIdentifier=hash\n")
4. 签发完成后,验证该证书是否为 CA 证书。
openssl x509 -in ca-ecc.crt -noout -text | grep -A2 "X509v3 Basic Constraints"
输出结果中,包含有 CA:TRUE 则为正确的 CA 证书。参考输出结果如下:
X509v3 Basic Constraints: critical
CA:TRUE # 代表该证书为 CA 证书。
X509v3 Key Usage: critical

步骤二:签发域名证书

以签发一本指定域名 www.example.com 的证书为例,您可以通过以上生成的 CA 证书,开始自签发域名证书:
1. 通过以下命令创建证书私钥,以生成 secp384r1 加密算法的 ECC 证书为例,将生成的私钥保存为 ecc-domain.key 文件。
openssl ecparam -name secp384r1 -genkey -noout -out ecc-domain.key
2. 使用以上证书私钥生成证书签名请求文件(CSR),保存为 ecc-domain.csr,以下命令通过 -subj 指定了证书的基本信息, 请注意将 CN 字段内容替换为你想签发的域名,本示例中以 www.example.com 为例。
openssl req -new -key ecc-domain.key -out ecc-domain.csr -subj "/C=US/ST=State/L=City/O=Example Org/OU=Example CA/CN=www.example.com"
3. 使用 CA 证书签名,生成域名证书公钥,有效期为 3650 天,保存为 ecc-domain.crt
openssl x509 -req -in ecc-domain.csr -out ecc-domain.crt -CA ca-ecc.crt -CAkey ca-ecc.key -days 3650
4. 对比 CA 证书和域名证书公钥,验证签发后的域名证书的证书链是否正确。
openssl verify -CAfile ca-ecc.crt ecc-domain.crt
输出结果中,如果显示 ecc-domain.crt:OK,则说明该证书签发链路正确。
ecc-domain.crt: OK