一键部署证书至ECS配置方案

重要

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

与手动部署相比,一键部署无需手动配置证书路径,可将证书一键部署至云服务器ECS。如果您购买的是多年期证书,则可以实现云服务器中Web应用证书的完全自动化部署。本文介绍一键部署证书至ECS的限制及流程。

一键部署限制

  • 仅支持以下ECS可信实例规格,不支持轻量应用服务器。

    • 基于x86架构的第七代和第八代ECS实例规格族。

      • 七代:ecs.g7、ecs.g7a、ecs.g7h、cs.c7a、ecs.c7、ecs.r7p、ecs.r7a、ecs.r7、ecs.hfc7、ecs.hfg7、ecs.hfr7。

      • 八代:ecs.g8i、ecs.hfg8i、ecs.hfc8i、ecs.c8i、ecs.hfr8i、ecs.r8i、ecs.g8a、ecs.c8a、ecs.r8a、ecs.g8ae、ecs.c8aeecs.r8ae。

    • Alibaba Cloud Linux3.xUbuntu22.04 UEFI镜像。

  • 支持的证书类型:RSA算法的证书。

  • 支持的Web应用服务器:Nginx。不支持自行构建的Nginx,如果ECS实例中已安装不支持一键部署的Nginx,需要您将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。

  • 一个部署任务仅支持将一张证书部署至一个ECS实例,如需部署多个SSL证书,请创建多个部署任务。

前提条件

  • 已购买支持一键部署的ECS可信实例。

    购买ECS实例时,请务必勾选可信系统。具体操作,请参见创建可信实例

    image

  • 已签发单域名RSA算法的SSL证书。

    • 通过阿里云签发正式SSL证书,请参见购买SSL证书申请SSL证书

    • 通过阿里云签发个人测试证书,请参见申请个人测试证书

    • 通过第三方平台或其他阿里云账号获取签发后的SSL证书,并上传至数字证书管理服务控制台,请参见上传和共享SSL证书

      重要
      • 部署手动上传的证书,需要购买部署次数,费用为30元/次,有效期为一年

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

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

通过SSL证书控制台为ECS一键安装部署证书,需要确保ECS已正确安装云助手(cloudAssistant),否则无法在控制台实现自动化一键部署SSL证书。查看步骤如下:

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

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

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

    说明

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

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

首次部署需要修改Nginx配置文件,后续更新则无需配置。

Alibaba Cloud Linux 3.x镜像

说明

本示例是以Nginx 1.20.1版本为例介绍。/etc/nginx/是使用yum方式安装Nginx的默认安装目录。如果您手动修改过该目录,请根据实际配置调整。

  1. 支持的WebServer及版本:

    Nginx:1.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;用于指定使用SSL/TLS加密库。

    1. 添加内容:

      ssl_engine pkcs11;
    2. 添加位置及完整示例:

      # For more information on configuration, see:
      #   * Official English Documentation: http://nginx.org/en/docs/
      #   * Official Russian Documentation: http://nginx.org/ru/docs/
      
      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加密库。

    1. 添加内容:

      ssl_engine pkcs11;
    2. 添加位置及完整示例:

      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证书是否生效

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

https://yourdomain   #需要将yourdomain替换成证书绑定的域名。

如果浏览器的地址栏出现image图标,表示证书已经安装成功。Chrome浏览器自117版本开始已将地址栏中的image图标移至image图标中,如下图所示:

image

常见问题

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

image

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

相关文档

更新证书(非首次部署)至阿里云ECS或轻量应用服务器 — 云服务器部署