CasWAF
站点

HTTPS

网关在端口443上监听HTTPS,在端口80上监听普通HTTP。站点的Mode决定普通HTTP请求怎么处理;证书来自证书列表。

SSL模式

模式普通HTTPHTTPS
HTTPS Only以301跳转到HTTPS提供
HTTPS and HTTP提供提供
HTTP提供有证书匹配域名时提供
Static Folder不转发,而是提供Host里那个文件夹中的文件;见站点

新站点默认是HTTPS Only。站点还没有证书时,请用HTTP:HTTPS Only又没有证书时,每次访问都会跳转到一个连不上的HTTPS地址。

用哪张证书

证书在建立TLS连接时,按客户端发送的服务器名(SNI)选择,分两步:

  1. Name与请求的名字完全相同的证书,例如app.example.com。
  2. 否则,用以注册域名命名的证书,例如example.com。一张覆盖*.example.com和example.com、命名为example.com的通配符证书,就这样服务所有子域名。

客户端不发送服务器名,或请求的名字没有证书匹配时,无法建立连接:没有默认证书。站点编辑页在SSL cert下显示匹配到的证书。

证书不和站点绑定,所以证书也会服务还没有站点的域名;这时请求得到site not found。

TLS设置

  • TLS 1.2和1.3
  • TLS 1.2只用ECDHE密钥交换,配合AES-GCM或ChaCha20-Poly1305
  • 曲线X25519、P-256和P-384

这些是内置的,所有站点都一样。

CasWAF给HTTPS响应添加什么

  • Strict-Transport-Security: max-age=31536000; includeSubDomains,除非应用已经发送了这个响应头
  • 给每个没有Secure的Set-Cookie加上Secure

对所有响应,不论是不是HTTPS,如果应用在允许携带凭据的同时允许来源*或null,CasWAF会去掉Access-Control-Allow-Origin和其他Access-Control-*响应头,因为这种组合会让任何网站读到用户的数据。

只走HTTP的路径

有两类路径在应用模式之前由网关自己应答,所以即使是HTTPS Only站点,它们也能通过普通HTTP访问:

  • /.well-known/acme-challenge/<token>,用于Let's Encrypt和其他ACME客户端
  • /MP_verify_<code>.txt,微信要求域名提供的验证文件

两者都按站点的Challenges应答,每条写成<token>:<answer>或MP_verify_<code>.txt:<answer>。

在GitHub上编辑

本页内容