云服务器部署:部署 SSL 证书至 ECS/轻量应用服务器

重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

手动管理云服务器的SSL证书流程复杂、易出错,且续期时需重复操作。为解决此问题,数字证书管理服务提供了自动化部署功能,可将证书一键部署至指定的ECS可信实例,或将新证书自动更新至已配置证书的ECS及轻量应用服务器,以提升部署效率并降低配置风险。

部署方案选型

请根据您的服务器类型和部署场景,选择合适的方案。

特性

方法一:一键部署(适用于首次部署)

方法二:手动部署(适用于更新证书)

核心机制

全自动化。私钥不出实例,通过PKCS#11接口与硬件可信模块通信,安全性高。

半自动化。将证书文件上传至服务器指定路径,覆盖旧文件。

适用服务器

仅支持部分云服务器ECS可信实例(第七/八代x86架构),不支持轻量应用服务器。

支持所有ECS实例轻量应用服务器

适用操作系统

Alibaba Cloud Linux 3.x、Ubuntu 22.04 UEFI镜像。

所有主流LinuxWindows Server发行版。

适用Web服务器

仅支持通过yumapt源安装的特定版本Nginx。

支持Nginx、Apache、Tomcat等所有Web服务器。

SSL证书要求

RSA算法的单域名SSL证书。

所有类型的SSL证书。

适用场景

在符合条件的ECS可信实例上首次部署证书,以实现后续全自动续期。

更新云服务器ECS或轻量应用服务器中已部署的证书。

说明

若上述方案均不满足需求,请参考SSL 证书部署方案选型选择合适的部署方案。

一键部署(首次部署至ECS可信实例)

此方案通过与ECS可信实例的安全模块集成,实现证书和私钥的全自动化、高安全部署。若购买的为多年期证书,后续证书续签后,系统将自动完成更新。

适用范围

  • 实例类型与规格:基于x86架构的第七代和第八代ECS可信实例(详情可参见创建可信实例)。不支持轻量应用服务器。

  • 操作系统:Alibaba Cloud Linux 3.x、Ubuntu 22.04 UEFI镜像。

  • Web服务器:通过yumapt源安装的特定版本Nginx。

    • Alibaba Cloud Linux3.x镜像:通过yum安装的Nginx,版本为 1.18.0-2.1.al8 至 1.20.1-1.0.5.al8(不含)。

    • Ubuntu22.04 UEFI镜像:通过apt安装的Nginx。

  • 证书类型及状态:RSA算法的单域名SSL证书,且状态必须为已签发

  • 服务器权限:需要使用 root 账户或一个具有 sudo 权限的账户。

  • 域名备案与解析

    • ICP 备案:域名已完成工信部 ICP 备案(仅适用于中国内地服务器)。

    • 域名解析:域名已通过 A 记录解析至服务器的公网 IP。

    说明

    可访问网络诊断分析工具,输入域名,检查 DNS 服务商解析结果备案检查项,确保满足要求。

步骤一:确认ECS云助手状态正常

需确保ECS已正确安装云助手(cloudAssistant),否则无法在控制台实现一键部署SSL证书。

  1. 访问ECS控制台-云助手

  2. 选择目标资源所在的资源组和地域。

  3. ECS实例页签下,定位至目标ECS服务器,在云助手状态列查看状态。

    说明

    若未安装或云助手状态异常请参见查看云助手状态及异常状态处理进行处理。

步骤二:在ECS中配置Nginx Web应用服务器

首次部署需要修改Nginx配置文件,使其能够通过PKCS#11接口调用可信模块中的私钥。后续更新则无需此操作。

Alibaba Cloud Linux 3.x镜像

说明

本文以Nginx 1.20.1版本为例进行介绍。/etc/nginx/为通过 yum 安装Nginx的默认安装目录。若修改过该目录,请根据实际配置调整。

  1. 确认 Nginx 版本。

    当前仅支持 Nginx1.18.0-2.1.al8 ~ 1.20.1-1.0.5.al8(不包含此版本)。

    重要

    如果云服务器ECS已安装Nginx,需要您在使用一键部署功能前检查Nginx的安装版本是否支持,否则需要您将Nginx降低至支持的版本,或重新安装。

  2. 打开/etc/nginx/nginx.conf配置文件,并在pid /run/nginx.pid;后添加ssl_engine pkcs11;,以指定使用PKCS#11加密库。添加位置及完整示例:

    user nginx;
    worker_processes auto;
    error_log /var/log/nginx/error.log;
    pid /run/nginx.pid;
    
    # 指定使用PKCS#11加密库
    ssl_engine pkcs11;
  3. 打开/etc/nginx/nginx.conf配置文件,取消Settings for a TLS enabled server注释并添加include "/etc/acm/ssl/nginx-acm.conf";用于引用SSL密钥配置。

    • 添加内容:

      include "/etc/acm/ssl/nginx-acm.conf";
    • 添加位置及完整示例:

      server {
              listen       443 ssl http2;
              listen       [::]:443 ssl http2;
             
              # 指定主机名或公用NAME(CN)
              server_name  example.com;
              root         /usr/share/nginx/html;
      
              ssl_session_cache shared:SSL:1m;
              ssl_session_timeout  10m;
              ssl_prefer_server_ciphers on;
             
              # 引用SSL密钥配置
              include "/etc/acm/ssl/nginx-acm.conf";
             
              # Load configuration files for the default server block.
              include /etc/nginx/default.d/*.conf;
      
              error_page 404 /404.html;
                  location = /40x.html {
              }
      
              error_page 500 502 503 504 /50x.html;
                  location = /50x.html {
              }
          }
  4. 打开/usr/lib/systemd/system/nginx.service文件,添加P11_KIT_SERVER_ADDRESS=unix:path=/etc/acm/ssl/acm-p11-kit.sockOPENSSL_CONF=/etc/acm/ssl/openssl-acm.cnf用于配置与SSL密钥服务的通信。

    1. 添加内容:

      Environment="P11_KIT_SERVER_ADDRESS=unix:path=/etc/acm/ssl/acm-p11-kit.sock"
      Environment="OPENSSL_CONF=/etc/acm/ssl/openssl-acm.cnf"
    2. 添加位置及完整示例:

      [Unit]
      Description=A high performance web server and a reverse proxy server
      Documentation=man:nginx(8)
      After=network.target nss-lookup.target
      
      [Service]
      Type=forking
      PIDFile=/run/nginx.pid
      ExecStartPre=/usr/sbin/nginx -t -q -g 'daemon on; master_process on;'
      ExecStart=/usr/sbin/nginx -g 'daemon on; master_process on;'
      ExecReload=/usr/sbin/nginx -g 'daemon on; master_process on;' -s reload
      ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid
      TimeoutStopSec=5
      KillMode=mixed
      
      # 配置与SSL密钥服务的通信
      Environment="P11_KIT_SERVER_ADDRESS=unix:path=/etc/acm/ssl/acm-p11-kit.sock"
      Environment="OPENSSL_CONF=/etc/acm/ssl/openssl-acm.cnf"
      
      [Install]
      WantedBy=multi-user.target
      说明

      如果您不清楚Nginxsystemd服务配置文件路径,可执行sudo find / -name "nginx.service"查找。

  5. 执行以下命令,重载Nginx systemd服务配置。

    systemctl daemon-reload

Ubuntu 22.04镜像

说明

本示例是以Nginx 1.18.0版本为例介绍。/etc/nginx/为使用apt安装Nginx的默认安装目录。若手动修改过该目录或使用其他方式安装的Nginx,请根据实际配置调整。

  1. 打开/etc/nginx/nginx.conf配置文件,并在pid /run/nginx.pid;后添加ssl_engine pkcs11;用于指定使用SSL/TLS加密库。添加位置及完整示例:

    user www-data;
    worker_processes auto;
    pid /run/nginx.pid;
    
    # 指定使用PKCS#11加密库
    ssl_engine pkcs11;
    
    include /etc/nginx/modules-enabled/*.conf;
  2. 打开/etc/nginx/sites-enabled/default文件,在default文件中新建server块并添加include "/etc/acm/ssl/nginx-acm.conf";

    1. 添加内容:

      include "/etc/acm/ssl/nginx-acm.conf";
    2. 添加位置及完整示例:

      server {
          listen 443 ssl;
          
          # 指定主机名或公用NAME(CN)
          server_name example.com;
          root /var/www/html;
          index index.html index.htm;
          access_log /var/log/nginx/access_6equj5.log;
          error_log /var/log/nginx/error_6equj5.log;
          ssl on;
          
          # 引用SSL密钥配置
          include "/etc/acm/ssl/nginx-acm.conf";
      
          location / {
            try_files $uri $uri/ =404;
          }
      }
  3. 打开/usr/lib/systemd/system/nginx.service文件,添加P11_KIT_SERVER_ADDRESS=unix:path=/etc/acm/ssl/acm-p11-kit.sockOPENSSL_CONF=/etc/acm/ssl/openssl-acm.cnf用于配置与SSL密钥服务的通信。

    说明

    如果您不清楚Nginxsystemd服务配置文件路径,可执行sudo find / -name "nginx.service"查找。

    1. 添加内容:

      Environment="P11_KIT_SERVER_ADDRESS=unix:path=/etc/acm/ssl/acm-p11-kit.sock"
      Environment="OPENSSL_CONF=/etc/acm/ssl/openssl-acm.cnf"
    2. 添加位置及完整示例:

      [Unit]
      Description=A high performance web server and a reverse proxy server
      Documentation=man:nginx(8)
      After=network.target nss-lookup.target
      
      [Service]
      Type=forking
      PIDFile=/run/nginx.pid
      ExecStartPre=/usr/sbin/nginx -t -q -g 'daemon on; master_process on;'
      ExecStart=/usr/sbin/nginx -g 'daemon on; master_process on;'
      ExecReload=/usr/sbin/nginx -g 'daemon on; master_process on;' -s reload
      ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid
      TimeoutStopSec=5
      KillMode=mixed
      
      # 配置与SSL密钥服务的通信
      Environment="P11_KIT_SERVER_ADDRESS=unix:path=/etc/acm/ssl/acm-p11-kit.sock"
      Environment="OPENSSL_CONF=/etc/acm/ssl/openssl-acm.cnf"
      
      [Install]
      WantedBy=multi-user.target
  4. 执行以下命令,重载Nginx systemd服务配置。

    systemctl daemon-reload

步骤三:通过证书控制台部署证书

  1. 登录数字证书管理服务控制台

  2. 在左侧导航栏,选择部署和资源管理 > 云服务器部署

  3. 云服务器部署页面,单击创建任务,按照以下步骤部署SSL证书。

    1. 基础配置引导页,自定义任务名称,单击下一步

    2. 选择证书引导页,选择证书类型以及关联云服务器的SSL证书,单击下一步

      每个部署任务仅支持选择一张证书进行部署,如需部署多个证书,请创建多个部署任务。

    3. 选择资源引导页,选择支持一键部署的ECS实例,单击下一步

      image

      • 系统会自动识别并拉取当前阿里云账号下所有符合条件的ECS实例。如未显示资源,请在左上方资源总数区域单击同步云产品资源。资源同步时间取决于您的当前云产品的资源数,请您耐心等待。

      • 若列表中的实例资源较多,可通过全部类型下拉列表,选择一键部署/手动部署快速筛选支持的实例。

  4. 一键部署页签,确认是否已满足证书部署环境,如确认已满足,请勾选确认以上步骤已经完成,并单击继续部署

  5. 在提示对话框,单击确定

    警告

    重启Web应用服务器会对业务造成影响,建议您在业务低峰期进行部署。

    image

    • 手动重启Nginx命令参考:

      systemctl restart nginx.service
    • 重启后可通过curl命令测试Nginx SSL的链接情况。命令格式为curl -v https://<证书绑定的域名>

步骤四:确认部署任务状态

云服务器部署页面,找到您创建的任务,如果任务状态部署成功,表示已成功将证书上传至云服务器中。

image

步骤五:验证SSL证书是否生效

部署任务执行成功不代表证书生效,您仍需通过访问域名查看证书的生效情况。

  1. 请通过 HTTPS 访问您已绑定证书的域名(如 https://example.comexample.com 需替换为实际域名)。

  2. 若浏览器地址栏显示安全锁图标,说明证书已成功部署。如访问异常或未显示安全锁,请先清除浏览器缓存或使用无痕(隐私)模式重试。

    image

    Chrome 浏览器自 117 版本起,地址栏中的image已被新的image替代,需单击该图标后查看安全锁信息。

手动部署(更新已有证书)

此方案用于将新证书更新到已配置过证书的云服务器(ECS或轻量应用服务器),通过覆盖旧证书文件来简化续期和更换流程。不适用于首次部署。

适用范围

  • 云服务器类型:仅适用于阿里云云服务器(轻量应用服务器云服务器ECS)。

  • Web服务器:仅支持Nginx/Apache等直接引用PEM、CRT格式证书的Web环境,不支持IIS。

  • 服务器权限:需要使用 root 账户或一个具有 sudo 权限的账户。

步骤一:部署SSL证书

  1. 登录数字证书管理服务控制台

  2. 在左侧导航栏,选择部署和资源管理 > 云服务器部署

  3. 云服务器部署页面,单击创建任务

    1. 基础配置引导页,填写任务名称后,单击下一步

    2. 选择证书引导页,选择证书类型,勾选关联证书后,单击下一步

      • 通过私有CA服务签发的证书会同步至上传证书页签。

    3. 选择资源引导页,选择云服务器类型,勾选目标实例后,单击下一步。首次进入该页面,系统会自动识别并拉取当前阿里云账号下所有符合条件的云服务器实例(即云服务器中部署了Web应用)。

      说明

      如未显示资源,请单击资源总数区域的同步云产品资源手动同步,同步时间和云产品的资源数相关,请耐心等待。

      image

    4. 部署配置引导页,参考下表进行配置,单击确定

      重要

      证书路径私钥路径必须和Web应用中配置的证书路径一致,否则证书不会生效。

      下图为云服务器中Nginx的证书文件配置路径,仅供参考:

      image

      配置项

      描述

      配置示例(仅供参考,请以实际部署路径为准)

      证书路径

      证书文件存放在云服务器中的绝对路径。

      • Linux示例:/ssl/cert.pem

      • Windows示例:c:\ssl\cert.pem

      私钥路径

      证书私钥文件存放在云服务器中的绝对路径。

      • Linux示例:/ssl/cert.key

      • Windows示例:c:\ssl\cert.key

      证书链路径

      证书链文件存放在云服务器中的绝对路径。

      说明

      Web应用中已配置证书链文件时,请对照填写该路径。

      • Linux示例:/ssl/cert.cer

      • Windows示例:c:\ssl\cert.cer

      重启命令

      如果配置了重启命令,在部署证书后,将执行此命令重启云服务器中的Web应用或重新加载Web应用配置文件,以使证书生效。

      重要

      如出现Web应用重启失败的情况,请前往对应的云服务器进行操作。

      • 重新加载Nginx配置文件的命令为sudo nginx -s reload

      • 重启Apache服务的命令为sudo systemctl restart httpd

    5. 在弹出的对话框单击确定

      • 如果未配置重启命令,则提示如下。单击确定后,请登录对应云服务器手动重启Web应用服务,以确保证书立即生效。

        image

      • 如果配置了重启命令,则提示如下。请确认风险后单击确定,部署任务结束后会执行重启命令重启服务器,以确保证书立即生效。

        image

步骤二:确认部署任务状态

云服务器部署页面,找到您创建的任务,任务状态部署成功,即表示已成功将证书更新至云服务器中。

image

步骤三:验证SSL证书是否生效

  1. 请通过 HTTPS 访问您已绑定证书的域名(如 https://example.comexample.com 需替换为实际域名)。

  2. 若浏览器地址栏显示安全锁图标,说明证书已成功部署。如访问异常或未显示安全锁,请先清除浏览器缓存或使用无痕(隐私)模式重试。

    image

    Chrome 浏览器自 117 版本起,地址栏中的image已被新的image替代,需单击该图标后查看安全锁信息。

说明

如仍有问题,请参考常见问题进行排查。

配额与限制

  • 部署费用

    • 部署正式证书、个人测试证书或不同阿里云账号(账号需归属于同一个经过实名认证的个人或企业用户)之间共享的证书:免费,不消耗部署次数。

    • 部署您自行上传的证书:消耗部署次数。部署次数需购买部署次数,费用为30元/次。部署失败时,将返还相应的部署次数。

  • 配额限制

    每个部署任务仅支持将一张证书部署至一个云服务器实例。如需为多个实例部署,请创建多个任务。

应用于生产环境

  • 服务中断风险:两种部署方法最终都可能需要重启Web服务(如Nginx、Apache),这将导致服务在重启期间短暂中断。强烈建议您在业务低峰期执行部署操作

  • 平滑重载:对于支持平滑重载(reload)的Web服务器(如Nginx),在“方法二”的重启命令中,建议使用nginx -s reloadsystemctl reload nginx代替restart,以减少对现有连接的影响。

  • 监控与告警:建议在证书部署完成后,为域名开启域名监控功能。阿里云将自动检测证书有效期,并在证书到期前发送提醒,帮助您及时续期,避免服务中断。具体操作请参见购买并开启公网域名监控

常见问题

安装或更新证书后,证书未生效或 HTTPS 无法访问

常见原因如下:

  • 域名未完成备案。可访问网络诊断分析工具,输入域名并检查备案检查项是否为网站已备案,如需备案请参考ICP备案流程

  • 服务器安全组或防火墙未开放 443 端口。

  • 证书的绑定域名未包含当前访问的域名。

  • 部署任务的任务状态异常,请前往任务详情页,单击查看失败原因后,根据提示更新相关配置后重试。

部署报错“the cloud Assistant not install or run”怎么办?

image

原因:未安装ECS云助手或 ECS云助手状态异常。