术语表

SSL 解密检测 (SSL Inspection、HTTPS 解密)

最后核实

定义

SSL 解密检测是企业安全网关借助受管设备信任的私有 CA,对 TLS 流量进行解密、检查后再重新加密的做法。

SSL 解密检测(也称 TLS/HTTPS 检测)常见于企业部署的下一代防火墙、上网行为管理、安全 Web 网关和数据防泄漏(DLP)设备。受管设备访问 https://example.com 时,网关先终止这条连接,用内部私有 CA 即时签发一张 example.com 的证书返回给设备,同时自己去连接真实服务器,在中间转发流量并检查其中的恶意软件、违规行为或敏感数据外泄。这一切成立的前提,是企业根证书已被安装到这些设备的信任库中;本质上它是一种经过授权的中间人。

为什么重要

不做解密,网关能看到的基本只有域名,加密的恶意下载和数据外泄很难发现。但代价也实实在在:网关替用户校验服务器证书,如果它校验不严或协议支持陈旧,后面所有用户的安全性都会被拉低。使用证书锁定或双向 TLS 的应用会直接连不上;Python、Java、Node.js、Git、curl 等自带信任库的工具会报“self-signed certificate in certificate chain”之类的错误,直到把企业根证书加进去。多数部署会把网银、医疗等敏感类别列入免解密名单,并通过员工上网规范等制度事先告知。

例子

查看设备实际收到的证书由谁签发:

openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null \
  | openssl x509 -noout -issuer
# issuer=... CN = Example Corp Inspection CA   <- 流量正在被解密检测

给开发工具配置企业根证书,而不是关闭校验:

export NODE_EXTRA_CA_CERTS=/etc/ssl/corp-root.pem        # Node.js
export REQUESTS_CA_BUNDLE=/etc/ssl/corp-ca-bundle.pem     # Python requests(完整证书包)
git config --global http.sslCAInfo /etc/ssl/corp-ca-bundle.pem

常见误区

  • 解密检测是察觉不到的。 看一眼证书签发者就能发现,启用锁定的应用也会明显报错。
  • 网关能解密网络里任何设备的流量。 只有信任企业根证书的设备才行,其他设备会看到证书错误。
  • 工具报错就关掉证书校验。 应把企业根证书加入工具的信任库;关闭校验会让工具暴露在真正的攻击者面前。

延伸阅读