从 HTTP 到 HTTPS 让网站更安全

更新时间: 2024-04-03 14:13:06

手动部署

105

https://www.aliyun.com/solution/tech-solution/ssl

方案概览

在ECS上部署Web应用是非常常见的业务场景,用户使用HTTP请求访问网站域名,浏览器通常会显示“感叹号”,提醒用户当前访问的站点存在安全风险。使用HTTP明文请求的潜在风险如下:

  • 数据泄露及篡改:HTTP数据传输过程是以明文形式,并未加密,在传输路径上的监控者,转发者都可以直接看到数据内容,包括用户的敏感信息。可能会造成数据泄露及数据被恶意篡改。

  • 身份伪装:HTTP协议无法验证服务端的身份。攻击者可轻松假冒服务端,获取用户数据。

  • 搜索引擎排名:搜索引擎会降低不安全站点的权重,降低网站内容的搜索排名。

为了解决该问题,需要网站支持HTTPS协议访问。HTTPS协议可以防偷窥、防篡改及完成服务端身份验证等,可以保证请求全链路的数据访问安全。本案例为您介绍如何在ECS上搭建Web应用以及在Nginx服务器上部署SSL证书开启HTTPS安全访问。

方案架构

整体架构图如下图所示。

image

本方案的技术架构包括以下基础设施和云服务:

  • 1个专有网络VPC和1个交换机:构建云上私有网络。

  • 1台云服务器ECS:开放外网访问并部署Nginx服务,作为Web站点。

  • 1个SSL证书:需要将申请的证书部署到Nginx服务器。

部署准备

10

开始部署前,请按以下指引完成账号申请、账号充值、RAM用户创建和授权。

准备账号

  1. 如果您还没有阿里云账号,请访问阿里云账号注册页面,根据页面提示完成注册。阿里云账号是您使用云资源的付费实体,因此是部署方案的必要前提。

  2. 为阿里云账号充值

    1. 为节省成本,本方案默认全部选择使用按量付费资源,使用按量付费资源需要确保账户余额不小于100元。

    2. 完成本方案的部署及体验,预计产生费用不超过1元(假设您选择本文示例规格资源,且资源运行时间不超过60分钟。实际情况中可能会因您操作过程中实际使用的流量差异,会导致费用有所变化,请以控制台显示的实际报价以及最终账单为准,如下表格仅供参考)。

      序号

      产品

      计费项

      规格

      地域

      预估费用参考

      1

      云服务器 ECS

      ECS配置费

      • 实例:ecs.u1-c1m1.large(2 vCPU 2 GiB,抢占型实例)

      • 系统盘:ESSD云盘 40GiB

      华东1(杭州)

      0.376/元/时

      2

      云服务器 ECS

      公网流量费

      按使用流量计费:带宽峰值5 Mbps

      华东1(杭州)

      0.800元/GB

  3. 阿里云账号拥有操作资源的最高权限,从云资源安全角度考虑,建议您创建一个RAM用户,使RAM用户仅能操作有限的资源,然后由RAM用户完成本方案。

    1. 访问资源组页面,单击创建资源组,创建一个资源组,例如设置名称为ssl证书测试资源组

    2. 访问RAM控制台-用户页面,单击创建用户,填写相关信息,勾选控制台访问OpenAPI 调用访问,创建一个RAM用户。

    3. 单击已创建的RAM用户操作列的添加权限,选择授权范围为指定资源组(例如ssl证书测试资源组),然后授权。以下为本解决方案所需权限策略,您也可以根据需要适当调整。

      授权范围

      授权策略

      描述

      指定资源组

      AliyunVPCFullAccess

      管理专有网络VPC的权限

      AliyunECSWorkbenchFullAccess

      使用ECS-Workbench的完整权限,首次部署证书需要登录到ECS机器。

      AliyunECSFullAccess

      管理云服务器ECS的权限

      整个云账号

      AliyunDNSFullAccess

      管理云解析(DNS)的权限。

      AliyunYundunCertFullAccess

      管理数字证书管理服务的权限。

      AliyunECSReadOnlyAccess

      只读访问云服务器服务(ECS)的权限

创建ECS实例并部署Web服务

20

重要
  • 如果您已创建ECS实例并配置Web服务,可跳过该步骤,直接执行下一步。

  • 本步骤以操作系统Alibaba Cloud Linux 3为例,指导您如何部署Web服务(Nginx 1.20.1),其他操作系统教程略有差异。更多建站教程,请参见建站零基础入门

操作步骤

  1. 使用前面创建的RAM用户登录阿里云控制台,详情请参见RAM用户登录阿里云控制台

  2. 前往实例创建页,选择自定义购买页签,按界面提示创建一个ECS实例(假设为ECS_01)。

    请注意以下参数:

    • 付费类型:抢占式实例。

      重要
      • 为节省测试成本,本文示例采用抢占式实例,相对按量付费实例有一定的折扣。默认情况,您可以稳定持有抢占式实例至少一小时。一小时后,当市场价格高于您的出价或实例库存不足时,抢占式实例会被自动释放,请做好数据备份工作。

      • 如果您需要长期稳定持有ECS实例,付费类型建议选择包年包月或按量付费。

    • 地域:建议选择靠近您业务的地域,本文示例为华东1(杭州)。

    • 镜像:Alibaba Cloud Linux 3。

    • 公网 IP:勾选分配公网 IPv4 地址。

    • 安全组:新建普通安全组,安全组规则入方向添加TCP 22、80、443端口。

    • 登录凭证:选择自定义密码,登录名选择ecs-user并设置登录密码。

    • 高级选项-资源组:选择ssl证书测试资源组

    其他按需配置,详细说明,请参见自定义购买实例

  3. 部署Web服务。

    1. 远程连接ECS实例。具体操作,请参见通过密码或密钥认证登录Linux实例

    2. 执行以下命令,安装Nginx。

      sudo yum -y install nginx
    3. 下载网站示例代码和图片文件。

      以下文件仅为示例,供学习体验使用,您也可以替换为自定义文件。

      sudo wget -O /usr/share/nginx/html/index.html https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20231013/jhgg/index.html
      sudo wget -O /usr/share/nginx/html/lipstick.png https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20230925/zevs/lipstick.png
    4. 执行以下命令,启动Nginx并设置开机自启动。

      sudo systemctl start nginx 
      sudo systemctl enable nginx
    5. 在浏览器输入ECS实例的公网服务地址(例如http://123.1.XX.XX),可正常访问网站服务,表示Web服务部署成功。

  4. 配置域名解析。

    1. 准备已经完成备案的域名。

    2. 配置DNS解析,将域名解析地址指向ECS暴露的公网IP地址,云解析DNS产品的详细操作步骤请参见快速添加网站解析,如果您域名对应的DNS域名解析服务不在阿里云,请您前往域名对应的DNS域名解析商添加解析记录。

    3. 解析生效时间10分钟,通过域名访问Web应用,如:http://ssl-demo.aliyundoc.com,若结果和通过公网服务IP方式相同,则表示域名解析配置成功。

申请并下载SSL证书

35

操作步骤

  1. 访问免费证书购买页,选择证书规格Digicert,仔细阅读并勾选服务协议,单击立即购买并完成支付。

    每个阿里云个人或企业用户(以实名认证为准)每个自然年可以一次性申请20张免费证书(每个自然年仅限领取1次)。

  2. 登录数字证书管理服务控制台,在左侧导航栏,单击SSL证书

  3. 免费证书页签,单击创建证书,参考下表说明配置证书参数,选中快捷签发,单击提交审核

    配置项

    说明

    证书类型

    选择默认证书

    证书剩余数量/总数

    表示剩余可申请的证书个数/总共可申请的证书个数。只有当剩余可申请的证书个数不为0时,您才可以创建证书。

    域名名称

    选择您在CDN添加的域名。此处只可以填写一个单域名,例如ssl-demo.aliyundoc.com

    数量

    证书申请数量,默认为1,不支持增加。

    快捷签发

    域名验证方式

    • 如果您当前的阿里云账号与域名的DNS云解析服务所在账号一致,申请SSL证书时,阿里云数字证书管理服务将会自动识别,并默认选择自动DNS验证方式,且不支持修改,提交审核后,系统会自动进行DNS验证,您仅需等待证书签发即可。

    • 如果您当前的阿里云账号与域名的DNS云解析服务所在账号不一致,您可以选择以下任意一种方式进行域名所有权验证。

      • 手工DNS验证:您需要手动在对应的DNS域名解析服务商,添加一条TXT类型的解析记录用于域名所有权验证。

      • 文件验证:您需要手动从数字证书管理服务控制台下载一个专用的验证文件,然后将该文件上传到站点服务器的指定验证目录。

    联系人

    在下拉列表,单击新建联系人,新建本次证书申请的联系人。如果已创建过联系人,可以直接选择已有的联系人。

    请您务必确保联系人信息准确且有效。

    所在地

    选择您所在的城市或地区。

    密钥算法

    SSL证书使用的密钥算法。默认选择为RSA,且不支持修改。

    RSA算法是目前在全球应用广泛的非对称加密算法,兼容性好。

    CSR生成方式

    CSR(Certificate Signing Request)文件是SSL证书的请求文件,包含服务器信息和单位信息,需要提交给CA中心审核。

    您选择系统生成即可,表示由数字证书管理服务自动使用您在密钥算法指定的加密算法生成CSR文件。

  4. 按照验证信息中的提示,完成域名所有权的验证。如果域名验证方式自动DNS验证,系统会自动完成DNS验证,您仅需等待证书签发即可;如果域名验证方式选择手动DNS验证文件验证,您需要按照验证信息中的提示,完成域名所有权的验证。

    提交免费SSL证书申请后,一般会在30分钟左右完成审核和签发,请您耐心等待。SSL证书签发后,SSL证书状态将变更为已签发

  5. 在免费证书列表,定位到签发的证书,在操作列,单击下载

  6. 服务器类型为Nginx的操作列,单击下载,并解压SSL证书压缩包(包含PEM后缀的证书文件和KEY后缀的私钥文件)。

部署SSL证书实现网站HTTPS访问

20

操作步骤

  1. 登录云服务器ECS,并执行以下命令,在Nginx安装目录下创建一个用于存放证书的cert目录。

    sudo mkdir /etc/nginx/cert #创建证书目录,用于存放证书
  2. 使用WinSCP、Xshell等工具将证书文件和私钥文件上传到Nginx服务器的证书目录(/etc/nginx/cert)。

  3. 编辑Nginx配置文件nginx.conf,修改与证书相关的配置。

    1. 在nginx.conf中定位到server属性配置。

      image

    2. 删除行首注释符号#,并参考以下配置示例进行修改。

      server {
              #HTTPS的默认访问端口443
              #如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
              listen 443 ssl;
              #填写证书绑定的域名
              server_name <yourdomain>;    
              
              #填写证书文件绝对路径
              ssl_certificate      "/etc/nginx/cert/cert.pem";
              #填写证书私钥文件绝对路径 
              ssl_certificate_key  "/etc/nginx/cert/cert.key";
       
              ssl_session_cache    shared:SSL:1m;
              ssl_session_timeout  5m;
          
              #默认加密套件
              ssl_ciphers  HIGH:!aNULL:!MD5;
          
              #自定义设置使用的TLS协议的类型以及加密套件(以下为配置示例,请您自行评估是否需要配置)
              #TLS协议版本越高,HTTPS通信的安全性越高,但是相较于低版本TLS协议,高版本TLS协议对浏览器的兼容性较差。
              #ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
              #ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
          
              #表示优先使用服务端加密套件。默认开启
              ssl_prefer_server_ciphers  on;
       
              location / {
                  root   html;
                  index  index.html index.htm;
              }
          }
      }
  4. 执行以下命令,重新加载Nginx配置文件。

    sudo nginx -s reload

完成及清理

20

方案验证

证书安装完成后,您可通过浏览器访问证书的绑定域名,如https://ssl-demo.aliyundoc.com,如果网页地址栏出现小锁标志,表示证书已经安装成功,网站应用已经支持HTTPS访问。

清理资源

测试完方案后,您可以参考以下规则处理对应资源,避免继续产生费用:

  1. 释放云服务器ECS实例:

    登录ECS控制台,在实例页面,找到目标实例,然后在操作列选择216更多-竖向..png> 释放设置,根据界面提示释放实例。

  2. 释放1台交换机:

    登录专有网络控制台,在交换机页面,找到目标交换机,然后在操作列单击删除,按照界面提示释放实例。

  3. 释放1个专有网络VPC:

    登录专有网络控制台,在专有网络页面,找到目标VPC,然后在操作列单击删除,按照界面提示释放实例。

  4. 登录数字证书管理服务控制台,选择SSL证书,选择已签发的证书,点击右侧操作栏中的216更多-竖向..png> 吊销即可注销证书。