首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为SSL加密配置Server

为SSL加密配置Server
EN

Database Administration用户
提问于 2019-08-13 16:21:32
回答 2查看 465关注 0票数 2

我是DBA角色的新手,我的任务是为客户端配置Server安装,并要求跨两个实例分发数据库。到其中一个实例的连接需要SSL证书下的加密,因此我希望能够收集一些关于如何最好地实现和测试加密的建议。

我从一个证书颁发机构获得了一个可信的证书,并将其安装在服务器上,并将INS1协议上的属性设置为使用新的证书强制加密。

当我查询Exec时,对于所有活动的SPIDS,encrypt_option值显示为True。但是,我可以通过本地机器上的SSMS在加密连接下查询实例,而且我没有在本地安装证书副本。我的印象是,如果没有证书客户端的相应副本,我的连接将被拒绝,因为我需要访问公共/私钥,以便解密/加密在连接上交换的任何数据。

问题

  • 如果客户端没有在服务器上安装证书和ForceEncryption=True的副本,那么预期的行为是什么?
  • 应该拒绝与实例的连接,还是应该允许未加密的连接,假设客户端具有访问实例所需的凭据?
  • 是否允许我在没有安装了客户端的证书副本的情况下建立加密连接,因为颁发CA是作为本组安全策略的一部分推出的可信根CA?

Considerations

此外,外部客户端将通过我们DMZ中的Web服务器连接到实例,然后路由到与DB服务器通信的内部应用服务器。在本例中,链中的每个设备是否需要安装证书的副本(客户机、web服务器、应用服务器、数据库服务器)?

不幸的是,作为一个缺乏经验的DBA,可能有很多事情我甚至没有考虑过,所以任何可以提供的建议都会受到极大的赞赏。如果可能的话,如果有类似解决方案的实现人员的意见将是很好的。

对评论

的回应

您能详细说明一下“数据库将分布在两个实例中”吗?

客户端请求将托管在此服务器上的数据库分为两个实例,第一个实例承载需要加密连接的数据库,第二个实例承载允许未加密连接的数据库。

非常感谢

EN

回答 2

Database Administration用户

回答已采纳

发布于 2019-08-13 17:01:23

当客户端连接到服务器时,服务器提供其证书。如果客户端未显式配置为信任服务器返回的任何证书,则将检查客户端密钥存储库( client ),以确定它是否可以信任证书。如果客户端密钥存储库信任颁发证书的证书颁发机构链,则不必包含服务器证书的副本。

它与浏览器如何建立到web服务器的HTTPS连接完全相同。虽然您可能不知道,但浏览器的keystore被配置为信任多个证书颁发机构,因此只要站点返回的证书是由其中一个证书颁发机构创建的,它就会信任它。例如,这允许您建立到银行网站的HTTPS连接,而无需安装来自银行的证书。银行使用GoDaddy或DigiCert或类似的公共证书公司,浏览器默认配置为信任这些“已知的良好”证书生成器。

例如,组织通常在其网络上每个Windows系统的密钥库中安装根证书和基础设施证书。然后,当SQL Server (或web服务器或其他任何东西)安装了由该组织的密钥基础结构生成的证书时,大多数本机Windows进程将信任该证书,因为它们将使用Microsoft SQL客户端驱动程序,该驱动程序引用Windows密钥库来确定要信任的证书。

Java (如Microsoft和jTDS )将不使用Windows,因此需要将根证书和基础设施证书安装到相关的Java进程正在使用的密钥存储库中(通常是一个名为"cacerts“的文件,但JDBC允许指定密钥库文件)。另一个选项是配置连接字符串,使服务器返回的任何证书都是可信的。然而,这将带来连接到流氓服务器的风险,并且它将信任它的证书。

还有一些其他的SQL,如DataDirect电线协议,它们具有指定特定密钥存储库、信任服务器证书等选项。

是否允许我在没有安装了客户端的证书副本的情况下建立加密连接,因为颁发CA是作为本组安全策略的一部分推出的可信根CA?

是的,如前所述。

如果客户端没有在服务器上安装证书和ForceEncryption=True的副本,那么预期的行为是什么?是否应该拒绝与实例的连接?

我可以将这个问题修改为:“如果客户端不信任证书,那么预期的行为是什么?”因为它不必有证书的副本,只要它信任生成它的链。ForceEncryption听起来就像--它将不允许未经加密的连接。客户端必须信任返回的证书并建立SSL连接,以便连接并登录到Server。如果客户端不信任证书,客户端将无法登录,您将在Server错误日志中看到一个错误。

此外,外部客户端将通过我们DMZ中的Web服务器连接到实例,然后路由到与DB服务器通信的内部应用服务器。在本例中,链中的每个设备都需要证书的副本。

不,唯一需要信任Server返回的证书的系统是连接到Server的系统。例如,对于web应用程序,连接到Server的web服务器需要信任从server返回的证书或生成证书的链。连接到web应用程序的浏览器需要信任web服务器返回的证书。浏览器没有连接到Server,web服务器也不会将server的证书转发到浏览器。浏览器没有建立到Server的连接,因此它们不需要信任Server的证书。

票数 4
EN

Database Administration用户

发布于 2022-04-04 08:14:09

除了Tony的出色回答之外,值得注意的是,您可以将TrustServerCertificate=True包含在Server连接字符串(文档)中。这告诉客户端,它应该信任服务器提供的任何证书。这使得即使证书没有正确设置也可以加密连接,例如,如果服务器有一个自签名证书。

一连串的事件是这样的:

  • 客户端尝试连接到服务器,连接字符串具有Encrypt=TrueTrustServerCertificate=True
  • 服务器响应并显示其证书。
  • 如果证书不是由已知的CA颁发的,此时客户端通常会说“不可能,该证书看起来很不可靠!”但是因为连接字符串有TrustServerCertificate=True,所以它说“谁关心证书是什么样子的”,并接受连接并继续。

安全漏洞是,您的客户端可能连接到一个伪装成您的服务器的邪恶服务器,或者是一个查看所有经过的数据的中间人服务器。除了这个(重大的)安全问题外,连接还会被加密。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/245241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档