帮你快速理解、总结文档立即下载
文档中心>边缘安全加速平台 EO

使用双向认证握手回源

最近更新时间:2025-12-16 16:17:32
我的收藏
当您的域名接入 EdgeOne 后,客户端请求如果未命中请求则需要回到源站请求文件,为了源站的安全性,源站可对访问的来源进行验证,仅允许受信任的客户端请求回源。回源双向认证是指回源时在建立 TLS 连接的握手过程中,客户端(此处为 EdgeOne 的回源节点)和服务器(源站)互相出示并验证对方的证书。通过证书链或预先配置的信任根,源站可以确定发起回源请求的一方确实是受信任的 EdgeOne 节点,从而建立加密且双向认证的连接。
通过双向认证握手回源,可以有效阻断来自非法客户端或未授权节点的请求,减少被滥用的风险,并且可基于证书的生命周期管理更加稳定、可控且安全地管理访问来源。
说明:
回源双向认证当前仍在内测中,如需使用,请 联系我们 开启白名单使用。

使用限制

当前仅支持配置一本 RSA 证书或者一本 ECC 证书作为回源节点证书,暂时不支持国密 SM2 证书。

适用场景

源站需要保障严格的安全性,仅允许受信任的 EdgeOne 回源节点访问。

准备工作

1. 当前域名已接入 EdgeOne,并且已 配置 HTTPS 证书
2. 源站已配置了 RSA/ECC 算法的 HTTPS 证书,暂时不支持使用国密算法证书进行回源双向认证。
3. 一本用于 EdgeOne 回源节点使用的证书,该证书需要 上传至 SSL 控制台 ,例如:Client.crtClient.key;同时准备签发该证书的 CA 证书,例如:CA.crt
完成以上准备后,请参考以下命令先验证 CA.crtclient.crt 是否匹配。
openssl verify -CAfile CA.crt client.crt
输出结果中,如果显示 client.crt:OK,则说明该证书签发链路正确。参考如下:
client.crt: OK
说明:
建议可参考 使用 OpenSSL 生成自签名证书 自行生成可信的 CA 证书以及颁发给 EdgeOne 回源节点的证书,以确保该证书的可信。

操作步骤

例如:域名 www.example.com 当前已接入 EdgeOne,回源的源站地址是 1.1.1.1,以 Nginx 系统为例,需要配置回源时使用双向认证进行握手。

步骤 1:在源站内上传 CA 证书,信任客户端证书

源站配置,将信任的 CA 证书上传到源站,以接受客户端证书。以 Nginx 为例,您可以把准备好的 CA 证书,上传到源站内,例如:上传到 /etc/nginx/certs/CA.crt 目录下,然后编辑当前站点的 nginx.conf 文件,在 server{} 块中修改或者增加以下两个配置项并保存。
# 是否启用客户端验证,如果当前已经有业务正在运行,建议您先把 ssl_verify_client 配置为 optional。
ssl_verify_client optional;
# 签发客户端证书的 CA 证书所在目录。
ssl_client_certificate /etc/nginx/certs/CA.crt;
为了测试当前步骤所上传的 CA 证书与准备的客户端证书是否匹配,以及当前配置是否正确。建议在此步骤做充分测试,您可以参考以下测试步骤验证:
1. 在主配置 nginx.conf 文件(例如:/etc/nginx/nginx.conf/www/server/nginx/conf/nginx.conf)的 http{} 块中,添加如下配置并保存。
log_format ssl_log '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$ssl_client_verify" '
'"$ssl_client_s_dn" "$ssl_client_i_dn" "$ssl_client_fingerprint"';
2. 在当前站点的配置文件下的 server{} 配置中,引用以上日志输出格式。

# 按实际的 access_log 日志所在位置,输出日志文件到 access.log,使用上面定义的 ssl_log 格式。
access_log /var/log/nginx/access.log ssl_log;
3. 测试配置文件。
sudo nginx -t
如果 nginx -t 报错定位到某个文件和行,按错误提示修正(通常是把 log_format 放到了 server/location 内)。
如果没有问题,则重载配置。

# 若通过,继续以下命令重载配置
sudo systemctl reload nginx
4. 使用 curl 命令,可分别通过不携带客户端证书、携带错误的客户端证书以及携带正确的客户端证书发起访问,例如,携带正确的客户端证书的 curl 命令如下:
curl -vk https://1.1.1.1/ --cert client.crt --key client.key
然后查看当前站点的 access.log 日志,查看日志中的请求是否显示为“SUCCESS”,则代表当前配置正确。典型的验证结果如下:
当客户端提供了被信任的证书(验证通过),可以看到输出中包含:“SUCCESS”,表示在 TLS 握手阶段服务器收到了客户端证书并且验证通过。
127.0.0.1 - - [03/Dec/2025:20:05:46 +0800] "GET / HTTP/2.0" 200 50424 "TLSv1.3/TLS_AES_256_GCM_SHA384" "SUCCESS" "CN=client1,O=Client" "CN=Test CA" "AB:CD:...:12"
当客户端提供了证书但校验失败(例如 CA 不匹配、证书过期等),可以看到输出中包含:“FAILED:unable to verify the first certificate”,表示在 TLS 握手阶段服务器收到了客户端证书但是验证失败。
127.0.0.1 - - [03/Dec/2025:20:05:01 +0800] "GET / HTTP/2.0" 400 208 "TLSv1.3/TLS_AES_256_GCM_SHA384" "FAILED:unable to verify the first certificate" "CN=errorclient,O=error" "CN=Other CA" "12:34:...:EF"
当客户端没有提供证书,可以看到输出中包含:“NONE”,表示在 TLS 握手阶段服务器未收到客户端证书。
127.0.0.1 - - [03/Dec/2025:20:04:43 +0800] "GET / HTTP/1.1" 404 138 "TLSv1.2/ECDHE-ECDSA-AES128-GCM-SHA256" "NONE" "-" "-" "-" "-"

步骤 2:在 EdgeOne 内配置使用回源双向认证

1. 登录 边缘安全加速平台 EO 控制台,通过站点列表,选择需配置的站点,进入站点管理二级菜单。
2. 在左侧导航栏中,单击域名服务 > 域名管理。在域名管理页面,选择待配置证书的域名,在 HTTPS 列内单击编辑,弹出 HTTPS 证书配置。
3. 找到 回源双向认证 卡片,点击配置。选择需要配置的回源节点证书,证书即为已上传至 SSL 控制台内的证书,例如:Client.pemClient.key



4. 单击保存,即可下发配置,部署完成后配置即可生效。
5. 部署生效后,直接通过 curl 命令访问已接入 EO 的域名 www.example.com。如果在源站的 access.log 中,看到的 TLS 握手验证结果全部是"SUCCESS",继续进入下一步。

步骤 3:在源站内启用客户端证书验证

在源站内修改配置文件,编辑 Nginx 根目录下的 conf/nginx.conf,将步骤 1 内的配置项修改为 ssl_verify_client on ,即启用客户端证书认证,保存该配置。

步骤 4:测试验证

直接使用 curl 命令发起访问测试,验证能否正常访问。
curl https://www.example.com/ -v
查看请求是否正常响应,并且响应头 EO-Cache-StatusMISS 或者 RefreshHit,则代表当前请求已正常回源。



同时,此时您在源站的 access.log 中,看到的经 EdgeOne 发起的请求 TLS 握手验证结果全部是"SUCCESS"。
此时再携带错误的客户端证书或者不携带客户端证书直接访问源站,则请求会失败,并在日志中记录为“FAILED:unable to verify the first certificate”或者“NONE”。