Security 使用自签名证书连接到后端的安全前端

Security 使用自签名证书连接到后端的安全前端,security,ssl,Security,Ssl,我们位于domain.com的前端使用位于API.domain.com的API 对于domain.com,我们使用LetsEncrypt提供的SSL。但是,对于后端,使用自签名证书要简单得多 如果用户访问domain.com(它使用自签名证书连接到),是否会显示红色警告横幅?这可以练习吗?此外,我们可以用外部IP代替吗 总的来说,这不是个好主意。证书的目的是允许客户端验证它是否正在与正确的服务器进行通信,而不是与中间人攻击者进行通信。这样做的方式(稍微简化)是证书包括服务器的公钥,以及客户端要与

我们位于domain.com的前端使用位于API.domain.com的API

对于domain.com,我们使用LetsEncrypt提供的SSL。但是,对于后端,使用自签名证书要简单得多


如果用户访问domain.com(它使用自签名证书连接到),是否会显示红色警告横幅?这可以练习吗?此外,我们可以用外部IP代替吗

总的来说,这不是个好主意。证书的目的是允许客户端验证它是否正在与正确的服务器进行通信,而不是与中间人攻击者进行通信。这样做的方式(稍微简化)是证书包括服务器的公钥,以及客户端要与之通信的服务器的域名(“公用名”)。然后,该证书由另一个类型和内容大致相同的证书签名,依此类推,直到链到达一个不需要另一个签名的证书,因为它已被客户端信任(例如,它位于操作系统的受信任根列表中)

自签名证书没有此签名链,它称为自签名,因为用于对其进行签名的证书本身就是自签名证书。客户端无法验证证书(当然,除非它明确地将证书列为受信任证书)。这意味着攻击者可以通过对同一域名的不同证书(但使用不同的密钥对)进行自签名来欺骗(模拟)您的API。这可能允许窃取凭据或提供虚假数据。请注意,攻击者还可能将用户输入的信息(发出的所有请求)中继到真实的API,因此响应(也由攻击者首先接收,但中继到受害者)在没有太多背景信息的情况下很容易看起来非常真实

这(理论上)可以通过证书固定来解决,但对于Javascript客户端来说,这将很困难(如果可能的话)。HPKP似乎是一个解决方案,但HPKP不能与自签名(不可验证)证书一起使用。我不确定Javascript是否具有适当级别的服务器证书访问权限来实现固定

即使您实现了固定,自签名证书也不能被撤销。考虑一下,如果您在api域中发现用于https的TLS密钥存在漏洞,将会发生什么情况。您将无法撤销该密钥,因此客户端仍会接受一个MitM攻击者为该受损密钥提供服务

需要付出大量的努力,您可以实现一些不标准、难以纠正且容易出错的东西

或者您也可以使用api.domain.com的免费letsencrypt证书,所有必要的基础结构和设置都已在主域上完成。:)