实验概述
互联网巨头雅虎官方对外发布消息,承认在2014年的一次黑客袭击中,至少5亿用户的数据信息遭窃。此次事件让我们再次意识到网站安全的重要性,网站加密防护的必要性。我们可以使用HTTPS协议对网站进行全站加密,但是,大部分用户已经习惯直接输入域名(即使用 HTTP 协议)访问网站。因此,企业需要将用户的 HTTP 请求转化为 HTTPS 请求进行访问。这个问题在传统的 IT 架构中已经得到解决,但是在云上如何解决 HTTP 与 HTTPS 的混合访问?
本实验使用负载均衡配置监听,利用Nginx实现HTTP请求向HTTPS请求的转化,从而完成HTTP和HTTPS的混合访问。
HTTP请求转化为HTTPS请求架构图
实验目标
完成此实验后,可以掌握的能力有:
1)使用负载均衡配置HTTP和HTTPS监听,支持HTTP请求和HTTPS请求的混合访问;
2)使用Nginx将HTTP请求转化为HTTPS请求;
一、实验背景
1.1 背景知识
HTTPS 协议 HTTPS 能够加密信息,以免敏感信息被第三方获取。所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用 HTTPS 协议。
基本概念
HTTPS 是更安全的 HTTP 协议,它在 TCP(负责网络数据传输)和 HTTP层 之间,增加了一个 SSL 层。这一层通过数字证书和加密算法对 HTTP 请求进行加密。已经采用 HTTP 协议的网站要过渡到 HTTPS,将在技术改造、服务器资源、流量资源上付出更多成本。
工作流程 HTTPS 其实是有两部分组成:HTTP + SSL / TLS,也就是在 HTTP 上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过 TLS 进行加密,所以传输的数据都是加密后的数据。 负载均衡监听
负载均衡提供四层(TCP/UDP协议)和七层(HTTP/HTTPS协议)监听,您可根据应用场景选择监听协议:
负载均衡四层监听将请求直接转发到后端ECS实例,而且不修改标头。
负载均衡七层监听原理上是反向代理的一种实现,客户端HTTP请求到达负载均衡监听后,负载均衡服务器会通过与后端ECS建立TCP连接,即再次通过新TCP连接HTTP协议访问后端,而不是直接转发报文到后端ECS。
二、实验详情
2.1 实验资源
在弹出的左侧栏中,点击 创建资源 按钮,开始创建实验资源。 资源创建过程需要1-3分钟。完成实验资源的创建后,用户可以通过 实验资源 查看实验中所需的资源信息,例如:阿里云账号等。
2.2 使用HTTP请求查看网站服务器
本小节主要内容:直接通过 ECS 实例的 IP 地址,访问并查看已部署的 Web 网站。
- 通过如下步骤,查看 实验资源 中 Web服务器01 的网站信息:
1)点击左侧导航栏 实验资源 ,并拷贝 Web服务器01 的 外网地址 。
2)新建一个浏览器页面,并输入 Web服务器01 的 外网地址 ,浏览网站 LAB013 ROOM 。
- 参考如上步骤,在浏览器中,输入 Web服务器02 的 外网地址 ,并访问 Web服务器02 网站。
- 可以查看到两台服务器的内容完全一致。一般情况下,为了保证企业业务的持续性,企业会将生产环境部署到两台相同的服务器中。这样在高并发时,通过负载均衡可以将网站的流量分发到不同的服务器后端,从而提升用户体验。
2.3 负载均衡中添加HTTP和HTTPS监听
本小节主要内容:在负载均衡(SLB)中添加 HTTPS 和 HTTP 协议监听
- 首先,通过如下步骤,访问阿里云负载均衡(SLB)管理控制台:
1)点击页面左侧导航栏 实验资源 ,并点击 前往控制台 。
2)在打开的阿里云 RAM用户登录 页面中,分别输入 实验资源 中提供的 子用户名称 、子用户密码 ,并点击 登录 :
注意:若登录信息错误,请查看 企业别名 是否与 实验资源 提供的 阿里云主账号企业别名 相同。 3)在阿里云管理控制台,点击顶部导航栏处的 产品与服务 ,下拉列表中,依次选择 云计算基础服务 ---> 弹性计算 ---> 负载均衡 ,进入负载均衡的管理控制台。 2. 通过如下步骤,进入 实验资源 提供的 负载均衡 实例的管理页面:
1)在实例管理页面,顶部的地址栏中,选择 实验资源 提供的 地址 ,例如:华东1 。
2)在地址栏下面的搜索栏中,选择 负载均衡ID ,并输入 实验资源 中 负载均衡 的 实例ID ,点击 搜索 。
3)在搜索栏下,查看搜索结果,并点击实例右侧的 管理 ,进入 负载均衡 实例的管理页面。 3. 通过如下步骤,添加 负载均衡 的 HTTPS 协议的监听。
1)在负载均衡实例页面,点击下侧栏的 监听 。
2)在实例监听页面,点击右侧 添加监听 。 3)在 基本配置 页面,配置如下信息:
前端协议[端口]:选择 HTTPS ,并填写端口号为 443 ; 服务器证书 :选择已有服务器证书 lab-ca 。
说明:SLB 的服务器证书是本实验已提供的公共资源。SLB 的证书上传的具体操作步骤,请参考章节 上传证书。 其余配置信息保持默认,完成如上配置后,点击 下一步 。 通过添加,把提供的两台ECS服务器放到SLB资源池。 确认后,在服务器后端,填写80,然后点击下一步 说明:本实验中不会对添加的 ECS 实例进行健康检查,但是,在真实的工作环境中,强烈建议用户开启健康检查。健康检查的操作和使用,请参考实验 SL010 使用SLB实现持续性高并发访问 。 5)等待 3-5 秒,提示 恭喜,监听配置成功 ,完成后,点击 确认 。 6)返回监听配置页面,查看到新建 HTTPS:443 监听的 状态 为 运行中 。此时,HTTPS协议监听添加成功。 4. 通过如下步骤,添加 负载均衡 的 HTTP 协议的监听。
1)再次点击页面下侧的 添加监听 。 2)在 基本配置 页面,配置如下信息:
前端协议[端口]:选择 HTTP ,并填写端口号为 80 ; 后端服务器组,选择默认服务器组
后端协议[端口]:默认使用 HTTP ,填写端口号为 88 ; 其余配置信息保持默认,完成如上配置后,点击 下一步 。 说明:本实验中使用 88 端口进行判定和转发的,在真实的工作环境中,用户请根据实际情况设置端口信息。
3)在健康检查配置中,关闭 健康检查,完成后,点击 确认 。 4)等待 1-3 秒,提示监听配置成功 ,完成后,点击 确认 。
5)在监听配置中,可以查看到新建监听 HTTP:80 。
2.4 分别查看两种请求的访问效果
本小节主要内容:测试负载均衡的监听是否生效。
- 验证 HTTP 协议监听:在浏览器中新建一个页面,输入 实验资源 提供的 负载均衡 的 IP地址 。此时,页面提示 502 错误。证明 HTTP 协议监听开启,但是无法正常访问网站。
说明:HTTP请求没有经过加密,需要在之后的的步骤中进行配置,将它转化为HTTPS请求才能够访问。 2. 通过如下步骤,验证 HTTPS 协议监听:
1)在浏览器中,新建页面,并输入 https://xxx.xxx.xxx.xxx (其中 xxx.xxx.xxx.xxx 为 实验资源 提供的 负载均衡 的 IP地址 )。
注意:必须输入 https:// ,否则会出现访问错误。
2)页面提示 您的连接不是私密连接 ,点击页面下端的 高级 。
说明:由于本实验使用的是公共证书,因此会出现这样的提示。在真实的工作环境中,若上传到SLB的证书是有效的,则不会出现这样的提示。请参考章节:上传证书。 3)展开信息提示证书的相关信息,点击 继续前往xxx.xxx.xxx.xxx(不安全) 。 4)页面显示 LAB013 ROOM 网站,证明 HTTPS 监听配置成功,且用户可以通过 HTTPS 访问到后端服务器部署的网站
2.5 HTTP请求转化为HTTPS请求
本小节主要内容:通过重定向的方式将来自 HTTP 请求转发到 HTTPS,实现用户直接通过输入负载均衡 IP 地址就可以直接访问网站。
- 通过本地远程连接服务,远程登录到 我的实验资源 中的 Web服务器01 ECS实例。
说明:远程连接的详细操作步骤,请参考 帮助文档 。登录时,请使用 实验资源 提供的 外网地址 ,用户 和 密码。 2. 通过如下步骤,修改 Nginx 配置文件:将所有 88 端口请求,都转发到负载均衡的 HTTPS 协议的 IP 访问地址:
1)输入如下命令,进入 Nginx 配置文件的编辑页面。
vim /etc/nginx/nginx.conf
2)键盘输入 i ,进入 编辑 模式。
3)清空 85 行到 94 行的注释 # ,如下图所示: 4)修改 rewrite 的参数信息,将 xxx.xxx.xxx.xxx 替换为 实验资源 提供的 负载均衡 的 IP地址 。
说明:在真实的工作环境中,若使用域名访问,请将此处的 https://xxx.xxx.xxx.xxx 替换为 https 协议访问的域名。例如:https://lab.aliyunedu.net。 5)完成如上修改后,在键盘中点击 esc ,退出编辑模式。
6)输入以下命令 ,保存并退出 nginx.conf 的编辑页面。
:wq
- 执行如下命令,重启Nginx。
service nginx restart
- 参考如上步骤,修改 Web服务器02 的信息。
1)登录到 实验资源 提供的 Web服务器02 。
2)修改 Nginx 配置文件
vim /etc/nginx/nginx.conf
3)重启 Nginx 服务器:
service nginx restart
- 完成如上配置后,通过如下步骤,验证通过负载均衡的 HTTP 访问网站,是否可以自动跳转到 HTTPS 访问:
1)在浏览器中,输入并访问 负载均衡 的 IP地址 。
2)可以看到,直接跳转到 https 协议访问页面,点击 继续访问 。
说明:建议使用另一个浏览器查看结果,因为会由于页面的缓存问题,将不会显示下图所示的页面。 3)页面显示 LAB013 ROOM 网站。
三、技能提升
3.1 购买服务器证书
本小节主要内容:在阿里云的 证书服务 ,购买一个服务器证书。
说明:本章不提供实操资源,仅供阅读与学习。
- 通过如下步骤,购买一个阿里云的免费证书:
1)通过在阿里云管理台,进入 证书服务 的管理控制台。 2)点击右上角的 购买证书 。 3)在证书购买页面,证书类型 选择 免费DV SSL 。 4)其余保持默认,完成后,点击 立即购买 。 5)点击 去支付 。 6)点击 确认支付 。 7)提示 恭喜,支付成功 ,关闭购买页面。
- 返回 证书服务 管理控制台,在我的订单中,查看到新购买的证书 状态 为 待完成 。
- 通过如下步骤,在本地服务器上生成证书的 .csr 文件和 .key 文件。
1)在本地Linux操作系统的服务器中,执行如下命令,生成 2048 位的加密私钥。
openssl genrsa -out ca.key 2048
2)执行如下命令,生成 证书签名请求(CSR)。
openssl req -new -key ca.key -out ca.csr
请参考下图,输入参数信息。
注意:Common Name 为服务器绑定的域名。
4. 通过如下步骤,补全阿里云上购买的证书信息:
1)返回阿里云 证书服务 的管理控制台,并点击新购证书右侧的 补全 。 2)在 填写域名信息 页面,输入证书绑定的域名,例如:lab.aliyunedu.net。点击 下一步 。 3)在 填写个人信息 页面,输入个人信息。完成后,点击 下一步 。 4)在 上传相关信息 页面,选择 自己生成CSR 。 5)在本地服务器中,输入如下命令,查看 ca.csr 文件内容。
cat ca.csr
6)粘贴 ca.csr 文件内容到 请输入上传的CSR文件 下方的文本框中。完成后,点击 保存 。 7)点击页面右下角的 提交审核 。 8)页面提示信息,点击 确认 。 9)此时,证书的 状态变为 审核中 。 5. 通过如下步骤,签发新购证书。
1)等待一段时间,邮箱收到一封证书相关的邮件。查看 主机记录 和 记录值 。 2)进入域名解析页面,添加一条解析。
3)设置 记录类型 为 CNAME ,并输入拷贝的 主机记录 和 记录值 。
4)完成后,点击 保存 。 5)返回 证书服务 管理控制台。等待一段时间,新购的证书 状态 将变为 已签发 ,此时证书可用。 6. 点击证书右侧的 下载 ,根据本地部署的服务器,获取相应的 .pem 格式证书内容,并查看证书的使用方法。
3.2 上传证书
本小节主要内容:个人或企业已有一个可用的证书的前提下,将证书上传到负载均衡服务中。
- 通过如下步骤,进入 负载均衡 的 证书管理 页面。
1)在阿里云管理控制台,依次顶部导航栏处的 产品与服务 ,并依次选择 云计算基础服务 ---> 网络 ---> 负载均衡 ,进入负载均衡管理控制台。 2)点击左侧栏的 证书管理 ,进入证书管理页面。 2. 通过如下步骤,将证书上传到负载均衡服务中。
1)点击右上角的 创建证书 。 2)输入 证书名称 ,例如:test-ca。
3)勾选证书使用的地域,例如:华北2 等。
说明:可勾选多个地域,例如:华北2 ,华东1 。
4)证书类型 选择 服务器证书 。 5)证书内容 输入证书的 .pem 格式文件内容。 6)私钥 ,输入证书的 .key 文件内容。 7)完成后,点击 确认 。 8)在证书管理页面,可以查看到证书的详细信息。 3. 最后,在绑定证书的域名中,添加 负载均衡实例IP地址的解析,就可以实现 HTTPS 协议的加密访问。
1)例如下图所示的网站: 2)例如:阿里云官网,输入 aliyun.com,自动跳转到 https 访问页面。
3.3 知识扩展
负载均衡的证书管理功能 针对 HTTPS 协议,提供统一的证书管理服务,证书无需上传到后端 ECS,解密处理在负载均衡上进行,降低后端 ECS CPU 开销。
证书格式要求 申请的证书为 linux 环境下 pem 格式的证书。负载均衡不支持其他格式的证书。
如果是通过 root CA 机构颁发的证书, 您拿到的证书为唯一的一份,不需要额外的证书,配置的站点即可被浏览器等访问设备认为可信。
如果是通过中级 CA 机构颁发的证书,您拿到的证书文件包含多份证书,需要人为的将服务器证书与中间证书合并在一起上传。
拼接规则为:服务器证书放第一份,中间证书放第二份,中间不要有空行。
注意:一般情况下,机构在颁发证书的时候会有对应说明, 请注意规则说明。
1)root CA 机构颁发的证书规则:
a. [——-BEGIN CERTIFICATE——-, ——-END CERTIFICATE——-] 开头和结尾;请将这些内容一并上传;
b. 每行 64 字符,最后一行长度可以不足 64 字符。
2)中级机构颁发的证书规则:
a.
——-BEGIN CERTIFICATE——-
——-END CERTIFICATE——-
——-BEGIN CERTIFICATE——-
——-END CERTIFICATE——-
——-BEGIN CERTIFICATE——-
——-END CERTIFICATE——-
b. 证书之间不能有空行;
c. 每一份证书遵守第一点关于证书的格式说明;
3)RSA 私钥规则:
a. [——-BEGIN RSA PRIVATE KEY——-, ——-END RSA PRIVATE KEY——-] 开头结尾;请将这些内容一并上传。
b. 每行64字符,最后一行长度可以不足64字符。
说明:如果您不是按照上述方案生成私钥,得到[——-BEGIN PRIVATE KEY——-, ——-END PRIVATE KEY——-] 这种样式的私钥,您可以按照如下方式转换:
首先,运行以下命令:
openssl rsa -in old_server_key.pem -out new_server_key.pem 然后,将 new_server_key.pem 的内容与证书一起上传。
转换证书格式 负载均衡只支持 PEM 格式的证书,其他格式的证书需要转换成 PEM 格式后,才能上传到负载均衡中。建议通过 openssl 工具进行转换。本文提供了使用 openssl 将以下几种比较流行的证书格式转换为 PEM 格式的方法。
1)DER 转换为 PEM
运行以下命令进行证书转化:
openssl x509 -inform der -in certificate.cer -out certificate.pem 运行以下命令进行私钥转化:
openssl rsa -inform DER -outform PEM -in privatekey.der -out privatekey.pem 2)P7B 转换为 PEM
运行以下命令进行证书转化:
openssl pkcs7 -print_certs -in incertificat.p7b -out outcertificate.cer
获取 outcertificat.cer 里面 [——-BEGIN CERTIFICATE——-, ——-END CERTIFICATE——-] 的内容作为证书上传。
3)PFX 转换为PEM
运行以下命令提取私钥:
openssl pkcs12 -in certname.pfx -nocerts -out key.pem -nodes 运行以下命令提取证书: openssl pkcs12 -in certname.pfx -nokeys -out cert.pem