我意识到这是一种奇怪的行为,我想知道在使用SQL Server生成的自签名证书时,它是否应该是这样工作的。
更准确地说:为什么客户机(Mgmt )在只有服务器端加密打开时不尝试验证/验证证书(无论是自签名/CA签名)?当客户端加密(“加密连接”)打开时,客户端为什么只验证/验证服务器提供的证书?
我添加了一个签名证书(由内部CA签名),用于服务器端加密。这需要在客户端计算机上安装内部CA证书(安装到受信任的根CA中),但我没有这样做。然而,当服务器端加密打开时,客户端(mgmt )仍然成功地连接.
发布于 2017-09-09 23:22:12
无论客户端加密规范是什么,在服务器端打开Force选项(SSCM->MSSQLSERVER网络配置->MSSQLSERVER->Properties->Flags-->Force Encryption)时,流量都将被加密。如果没有从受信任的CA安装证书,Server将使用自签名证书。
客户端无法验证自签名证书,因为不存在可信的第三方。因此,需要加密(Encrypt=true)的客户端还必须显式地指定证书是可信的,以便连接使用自签名证书成功。TrustServerCertificate=true基本上是说“是的,我理解风险,但无论如何都要连接”,并且证书链没有被验证。
CA颁发的证书将可信的第三方添加到混合中,这样证书链就可以由客户端使用TrustServerCertificate=false进行验证。虽然您可以连接TrustServerCertificate=true和CA颁发的证书(我认为这是您的第二个问题),但这并不安全,因为客户端可能不自觉地使用自签名证书。
当只打开ServerSide加密时,客户端(Mgmt )为什么不尝试验证/验证证书(是否是自签名/CA签名)?当>客户端加密(“加密连接”)打开时,客户端为什么只验证/验证服务器提供的证书?
服务器可以强制对所有客户端进行加密通信,但客户端始终有验证证书的责任。假设默认连接设置是SSMS和其他客户端中的Encrypt=false。这是说“我不需要加密的通信量,所以不管服务器设置或证书如何,都要连接。”ForceEncryption=true服务器设置通过加密通信量来增强此默认设置,而不管客户端请求的加密级别如何。此行为与ADO.NET提供程序的连接字符串语法文档中的摘录一致:
应用程序设置永远不会降低Server客户端配置管理器设置的安全性,但可能会增强它。
由于客户端最初没有请求加密,所以没有执行证书验证,但是仍然通过使用SQL Server上提供的任何证书加密通信来增强安全性。客户端可以指定Encrypt=true和TrustServerCertificate=false来进一步增强安全性。这不仅验证了可信证书的存在,而且还加密了通信,即使服务器上的ForceEncryption=false也是如此。
客户端必须选择加入证书验证。这样做是为了使您能够从服务器强制加密,而无需获得可信证书、在客户端上安装证书或更改客户端连接字符串。请参阅产品文档中的使用加密而不进行验证。
https://dba.stackexchange.com/questions/185511
复制相似问题