边缘加速
  • 站点加速
    • 概述
    • 访问控制
      • Token authentication
        • Token 鉴权
        • 认证方法A
        • 认证方法B
        • 认证方法C
        • 认证方法D
        • 认证方法V
    • 智能加速
    • Cache configuration
      • 概述
      • EdgeOne caching rules introduction
        • EdgeOne 内容缓存规则
        • 缓存键(Cache Key)介绍
        • Vary 特性
      • 缓存配置
        • 自定义 Cache Key
        • 节点缓存 TTL
        • 状态码缓存 TTL
        • 浏览器缓存 TTL
        • 离线缓存
        • 缓存预刷新
      • 清除和预热缓存
        • 清除缓存
        • 预热缓存
        • Prefetch M3U8
      • How to improve the Cache Hit Rate of EdgeOne
    • 文件优化
      • 内容压缩
      • 智能压缩
    • 网络优化
      • HTTP/2
      • HTTP/3(QUIC)
        • 概述
        • 启用 HTTP/3
        • QUIC SDK
          • SDK 概览
          • SDK 下载和集成指引
          • 代码示例
            • Android
            • iOS
          • API 文档
            • Android
            • iOS
      • IPv6 访问
      • 最大上传大小
      • WebSocket
      • 携带客户端 IP 头部回源
      • 携带客户端 IP 地理位置头部回源
      • 开启 gRPC
      • Network Error Logging
    • URL 重写
      • 访问 URL 重定向
      • 回源 URL 重写
    • 修改头部
      • 修改 HTTP 节点响应头
      • 修改 HTTP 回源请求头
    • Modify response content
      • HTTP Response
      • Custom Error Page
    • 规则引擎
      • 概述
      • 规则管理
      • 变量
      • 规则引擎支持的匹配类型与操作
    • Image and video processing
      • Audio and Video Pre-pulling
      • Just-in-Time Image Processing
      • Video Just-In-Time Processing
      • VOD Media Origin
    • Speed limit for single connection download
    • 请求与响应行为
      • HTTP响应
      • 请求处理顺序
      • EdgeOne 默认 HTTP 回源请求头
      • EdgeOne 默认 HTTP 响应头
      • HTTP限制
    • 媒体服务
      • 音视频预拉取
      • 实时图片处理
      • 实时媒体处理
      • 点播媒体源
  • 四层代理
    • 概述
    • 新建四层代理实例
    • 修改四层代理实例配置
    • 停用/删除四层代理实例
    • 批量配置转发规则
    • 获取客户端真实IP
      • 通过 TOA 获取 TCP 协议客户端真实 IP
      • 通过 Proxy Protocol V1/V2 协议获取客户端真实 IP
        • 概述
        • 方式一:通过 Nginx 获取客户端真实 IP
        • 方式二:在业务服务器解析客户端真实 IP
        • Proxy Protocol V1/V2 获取的客户端真实 IP 格式
      • 通过 SPP 协议传递客户端真实 IP
  • 边缘 DNS
    • Domain Name Services
      • 概述
      • DNS resolution for managed domains
        • 修改 DNS 服务器
        • 配置域名 DNS 解析记录
        • 批量导入DNS记录
        • DNS 高级配置
      • Access accelerated domains
        • 添加加速域名
        • 站点/域名归属权验证
        • 修改 CNAME 解析
        • 验证业务访问
      • Traffic scheduling
        • 流量调度管理
    • HTTPS Certificate
      • Overview
      • Edge HTTPS Certificate
        • Overview
        • Deploying/Updating SSL Certificate for A Domain Name
        • Configuring A Free Certificate for A Domain Name
        • Using Keyless Certificate
      • Edge mTLS Authentication
      • Origin Certificate Validation
      • HTTPS configuration
        • Forced HTTPS Access
        • Enabling HSTS
        • SSL/TLS security configuration
          • Configuring SSL/TLS Security
          • TLS Versions and Cipher Suites
        • Enabling OCSP Stapling
      • Related References
        • Using OpenSSL to Generate Self-Signed Certificates
        • Certificate Format Requirements
        • The Difference Between one-way authentication and Mutual authentication
    • 源站配置
      • 负载均衡
        • 概述
        • 快速创建负载均衡实例
        • 健康检查策略介绍
        • 查看源站健康状态
        • 相关参考
          • 负载均衡相关概念
          • 请求重试策略介绍
      • Origin Group Configuration
      • 回源配置
        • 回源超时
        • 配置回源 HTTPS
        • Host Header 重写
        • 回源请求参数设置
        • 回源跟随重定向
        • HTTP/2 回源
        • 分片回源
        • Modify Origin
        • Origin-pull Rate Limiting Policy
      • Origin Protection(Obtaining/Updating Origin IP Address Range)
      • 相关参考
        • 旧版源站组兼容相关问题

Using Keyless Certificate

通常,域名如果提供了 HTTPS 访问,则在服务端需要同时部署有证书的公钥、私钥才能完成握手过程中的通信加密和解密,如果您的域名需要接入 EdgeOne 进行安全加速,则也需要将证书的公钥、私钥都上传并部署在 EdgeOne 的边缘节点。如果您希望更严格地保存您的证书私钥,不希望将证书的私钥上传至腾讯云 SSL 控制台内,EdgeOne 支持 Keyless 无私钥证书部署方案,本文档将为您介绍如何使用 EdgeOne 的 Keyless 无私钥证书方案。
说明:
该功能当前正在内测中,如需使用,请 联系我们
当前 Keyless 方案仅支持使用 RSA 算法证书。

方案介绍

HTTPS 单向认证的握手流程(RSA 交换密钥算法为例)

正常情况下,如果在 EdgeOne 上配置了 HTTPS 证书,客户端使用 HTTPS 发起握手请求的流程如下(以使用 RSA 交换密钥算法为例):
1. 客户端向 EdgeOne 发起请求,将发送客户端 hello,并携带客户端生成的随机数以及支持的加密套件信息等发送给 EdgeOne;
2. EdgeOne 收到请求后,将在服务端也生成一个随机数,并将当前域名所配置的 HTTPS 证书公钥发送给客户端;
3. 客户端收到服务端随机数以及当前域名的公钥证书后,会通过 CA 证书对该证书进行验证,验证其有效并且可信任;
4. 确认证书验证通过后,客户端将根据当前加密算法生成一个预主密钥,并使用该证书内的公钥对预主密钥加密后发送给 EdgeOne;
5. EdgeOne 收到加密后的预主密钥,使用证书的私钥进行解密,获得预主密钥;
6. 此时服务端、客户端均具有完整的客户端随机数、服务端随机数以及预主密钥信息,将组合生成会话密钥,客户端和服务端均使用该会话密钥进行通信。



以上的加密通信会话的安全性在于服务端的证书私钥是安全的,如果服务端的证书私钥发生泄露,就有可能被攻击者利用导致会话信息泄露。

Keyless 无私钥证书方案中的握手流程(RSA 交换密钥算法为例)

EdgeOne 当前已支持 Keyless 无私钥证书方案,为了进一步保障证书私钥的安全性,支持用户仅部署域名证书的公钥部分到 EdgeOne 边缘节点内,用户可以自行存储私钥部分,在需要使用私钥证书时,可向存储 Keyless 服务端发起请求来使用私钥解密相关数据。与 HTTPS 单向认证握手的正常流程不一样的地方主要是在服务端收到加密后的预主密钥信息后,EdgeOne 将把该信息转发给 Keyless Server,由 Keyless Server 完成解密,并将解密后的预主密钥信息通过加密通信返回 EdgeOne。



说明:
默认情况下 EdgeOne 边缘节点和 Keyless Server 之间的可配置使用 HTTPS 安全通信加密,如果需要配置使用 HTTPS 双向认证握手来进一步保障该会话的安全性,请 联系我们

准备工作

1. 准备一台用于安装 Keyless Server 的服务器,例如:1.1.1.1
2. 准备一个需要使用 Keyless 的域名,例如:example.com,该域名已完成接入 EdgeOne,该域名对应的证书为:example.com.crtexample.com.key
3. 准备好当前所需要配置的服务端证书,包括客户端公钥、私钥,证书名称例如是:server.crtserver.key
说明:
您也可以通过自签名证书来准备测试所需的证书,可参考 使用 OpenSSL 生成自签名证书。自签名证书仅供测试使用,不受浏览器信任,不可应用于实际的业务中。

使用步骤

步骤一:在服务器上安装 Keyless Server 服务

1. 登录您准备安装 Keyless Server 的服务器内,确认已安装好以下依赖的环境,要求如下:
Go:版本应大于或等于 go1.20。
tRPC cmdline tools:用于生成PB(protobuf)协议代码。
trpc-go:版本为 v1.0.3 及以上。
Openssl:需要相关库 openssl-static(1:1.1.1k-12.tl3.1), openssl-devel(1:1.1.1k-12.tl3.1), and zlib-devel(1.2.11-25.tl3 ).
2. 确认已完成所有原来安装后,通过以下命令,从 GitHub 内下载由腾讯云 EdgeOne 提供的 Keyless server 开源项目代码到您指定的安装目录下。
git clone https://github.com/Tencent/edgeone-keyless-server.git
3. 进入 Keyless 项目的文件根目录下。
cd /edgeone-keyless-server
4. 在根目录下,创建目录 /ssl 用于存放 Keyless 公钥和私钥证书;目录 /ssl/mutual_ssl 用于存放服务器接收 Keyless 请求时,HTTPS 握手所使用的证书。
mkdir ssl
mkdir ssl/mutual_ssl
说明:
Keyless server 在收到 Keyless 无私钥加速的请求时,默认将读取存放在 /ssl 目录下的证书来获取该证书的私钥进行解密。如果您需要自定义证书的存放路径名称,需要在 /config/keyless.yaml 中修改 private_key_path 为当前存放证书的路径。
5. 上传用于当前域名的 Keyless 公钥和私钥证书,将该证书公钥、私钥文件都上传至/ssl 目录下;例如:example.com.crtexample.com.key。将用于 EdgeOne 边缘节点与 Keyless server 之间握手所需要的服务端证书,将证书的公钥和私钥文件上传至 ./ssl/mutual_ssl/ 目录下,例如:server.crtserver.key
注意:
Keyless 的公钥、私钥证书文件名必须保持一致。
如果您希望 EdgeOne 边缘节点和 Keyless server 之间使用 HTTPS 双向认证握手,请将客户端的 CA 证书也上传至 ./ssl/mutual_ssl/ 目录下,同时您还需要配置 EdgeOne 边缘节点向 Keyless server 发起访问时所携带的客户端证书,该证书配置请 联系我们 进行配置。
6. 运行以下命令,获取本机 IP 地址,例如:172.16.64.24
ifconfig -a



7. 修改配置文件。
vim trpc_go.yaml
7.1 按 i 进入插入模式,可以开始编辑该配置文件,主要修改以下五个参数,其余参数保持默认即可:
IP:使用第 6 步中获取的本机 IP 地址;
Port:对外提供的服务端口,推荐使用443,需要保障端口是可访问的;
tls_cert:第 5 步中上传的服务端证书的公钥路径,用于 EdgeOne 边缘节点与 Keyless server 之间 HTTPS 握手使用;
tls_key:第 5 步中上传的服务端证书的私钥路径,用于 EdgeOne 边缘节点与 Keyless server 之间 HTTPS 握手使用;
ca_cert:默认情况下,不需要配置。如果需要配置双向认证握手,该配置用于指定客户端证书的 CA 证书路径,即第 5 步中上传的客户端 CA 证书路径。



7.2 按 Esc 退出插入模式,然后输入 :wq 保存并退出。
8. 完成基础配置后,编译项目。
go build -o keyless main.go && chmod a+x keyless
9. 运行以下命令,启用 Keyless server 服务。
sudo nohup /edgeone-keyless-server/keyless >/dev/null 2>&1 &
10. 运行以下命令查看当前服务是否已启用成功,如果显示 launch success 即已经启用成功。
tail -f log/keyless.log


步骤二:在腾讯云 SSL 证书控制台内上传证书

将当前域名需要配置的证书(仅包含公钥)上传到腾讯云 SSL 控制台内,步骤请参见 上传证书至腾讯云 SSL 控制台
说明:
如果需要上传仅包含公钥的服务端证书,请 联系我们 为您开启腾讯云 SSL 产品白名单。

步骤三:在 EdgeOne 控制台内配置域名使用 Keyless 无私钥证书

1. 登录 边缘安全加速平台 EO 控制台,在左侧菜单栏中,进入服务总览,单击网站安全加速内需配置的站点。
2. 在站点详情页面,单击域名服务 > 域名管理。
3. 找到需要配置的域名,在 HTTPS 配置一列,单击编辑,找到边缘 HTTPS 配置卡片点击配置,选择配置方式为使用 Keyless 无私钥证书
4. 配置 Keyless 服务端的地址,该地址即为 步骤一 您所准备的服务器地址与端口号。



5. 选择需要使用的 HTTPS 证书,该证书即为您在 步骤二 内所上传的证书。
6. 单击确定,等待配置部署下发,即可生效。

步骤四:验证访问

使用 curl 进行访问验证,查看 HTTPS 握手是否可访问成功。您可以参照以下 curl 指令:
curl https://example.com/ -v -k

更新 Keyless 证书

1. 登录 Keyless server 服务器,进入当前已安装的 Keyless 目录,将需要更新的公钥、私钥证书,上传至./ssl/ 目录下。
注意:
Keyless 的公钥、私钥证书文件名必须保持一致,更新证书时,请勿直接覆盖旧的域名证书,建议另起一个文件名进行存放。例如:原证书名称是 example.com.crtexample.com.key,则新证书名字可以使用 example.com.new.crtexample.com.new.key
2. 上传完成后,执行以下命令重新加载 Keyless 证书。
curl http://127.0.0.1/KeylessReloadCerts -v
如果 curl 请求如下所示,响应 200,即加载成功:

3. 将当前需要更新的证书(仅包含公钥)上传到腾讯云 SSL 控制台内,步骤请参见 上传证书至腾讯云 SSL 控制台
4. 登录 边缘安全加速平台 EO 控制台,在左侧菜单栏中,进入服务总览,单击网站安全加速内需配置的站点。
5. 在站点详情页面,单击域名服务 > 域名管理。
6. 找到需要配置的域名,在 HTTPS 配置一列,单击编辑找到边缘 HTTPS 配置卡片点击配置,选择配置方式为使用 Keyless 无私钥证书
7. 将 HTTPS 证书 修改为您新上传的证书,然后单击确定,等待配置部署下发,即可生效。