我知道人们购买 SSL 证书来保护他们的网站。如果我想加密应用服务器和数据库之间的连接,我应该获得什么样的证书?顺便说一下,应用程序服务器可能无法通过公共 url 访问。
我的问题很笼统,但实际情况是服务器上的 Windows 环境和 RavenDb 作为数据库,如果这很重要的话
注意:我控制两个服务器及其安全设置。
我知道人们购买 SSL 证书来保护他们的网站。如果我想加密应用服务器和数据库之间的连接,我应该获得什么样的证书?顺便说一下,应用程序服务器可能无法通过公共 url 访问。
我的问题很笼统,但实际情况是服务器上的 Windows 环境和 RavenDb 作为数据库,如果这很重要的话
注意:我控制两个服务器及其安全设置。
重要的是要了解证书提供完整性,而加密提供机密性。换句话说; 该证书确保您正在与您认为自己的人交谈(如果是信任链的一部分),但它不会加密您的连接。然而,完整性和机密性几乎总是齐头并进的,这就是为什么客户端的公钥包含在其证书中的原因。一旦验证了为证书服务的资产的身份,其公钥可用于加密连接并协商进一步的加密细节。
理论上,只需在数据库服务器和应用程序服务器上生成一个密钥对,并使用它们来配置两者之间的加密就足够了。事实是,许多系统需要证书来加密连接,因此也可以验证连接另一端的身份。由于您的应用程序不是面向公众的,因此证书不需要由 CA 签名。您只需要生成一个密钥对,从中创建一个 CSR,然后对其进行自签名。不必在这里花钱。
您可以使用这些自签名证书来配置数据库和应用程序之间的加密。
如果您控制两台服务器,您甚至不需要使用证书,只需在每一侧设置另一侧的受信任公钥并使用它来建立类似 SSL/TLS 的连接。
但是,最简单的方法可能是真正使用 SSL/TLS 和证书,因为这是您能够在大多数系统上设置此类受保护连接的唯一方法。但是在这种情况下您不需要购买证书,使用自签名证书是可以的,因为使用受信任的 CA 颁发证书不会有太多真正的优势。这里的问题是您保护数据库端私钥的程度如何。如果您有该密钥的自签名证书或 CA 签名证书,但您丢失了私钥,则效果几乎相同,因为缓解它的最快方法是删除应用程序上的密钥可信度并将其替换为新的一个(在 CA 上,您也可以要求吊销证书,但这需要更多时间才能生效)。
您需要为数据库生成一个自签名证书,并设置数据库以使用它。然后将此证书作为受信任的应用程序连接配置。
也许您可以做得更好,如果您的数据库支持客户端证书验证,您还可以在数据库中信任的应用程序中拥有一个证书。因此,要连接和建立受信任的连接,需要同时拥有客户端和服务器私钥。但我不知道是否有任何数据库支持它。如果您提供有关您使用的数据库的详细信息,可能会给出更详细的答案。