我是这个社区的新手,对与安全相关的事情有点了解。
我有三台服务器
- 网络服务器(客户端)
- 邮件服务器 (eSMTP)
- 网络服务器
所有服务器都有自己的 SSL 证书,并被要求执行以下操作:
Web 服务器(客户端)必须使用 TLS 向其他两个服务器发出安全请求,并且只接受来自这些服务器的证书,仅此而已。有没有办法在openssl中配置它?我的问题是,证书是本地/自签名的。
客户端服务器是 RHEL 7。
我是这个社区的新手,对与安全相关的事情有点了解。
我有三台服务器
所有服务器都有自己的 SSL 证书,并被要求执行以下操作:
Web 服务器(客户端)必须使用 TLS 向其他两个服务器发出安全请求,并且只接受来自这些服务器的证书,仅此而已。有没有办法在openssl中配置它?我的问题是,证书是本地/自签名的。
客户端服务器是 RHEL 7。
您正在谈论的做法称为“证书固定”(或有时称为“公钥固定”),当您同时控制客户端和服务器时,这是一种常见的安全建议。
通常这是通过配置 TLS 客户端代码(可能是 OpenSSL 或其他一些库)以引入自定义证书验证步骤(通常是在建立连接时调用的函数)来完成,并在该步骤中验证证书服务器提供的与您期望的匹配。您可能想查看https://stackoverflow.com/questions/16291809/programmatically-verify-certificate-chain-using-openssl-api或https://stackoverflow.com/questions/3412032/how-do-you- verify-a-public-key-was-issued-by-your-private-ca用于执行此操作的代码示例(尽管这些示例很旧并且可能已过时);OpenSSL 的 API 很容易出错。
您可能还想阅读https://labs.nettitude.com/tutorials/tls-certificate-pinning-101/或类似内容,其中讨论了进行固定时的注意事项。特别是,您要考虑诸如您固定哪个证书(特定叶证书、根 CA 或介于两者之间)以及您固定多少证书(固定整个证书似乎很容易,但重新颁发证书却很复杂)之类的事情使用新的日期或 OID 或类似信息,而只需固定公钥详细信息即可在大多数情况下提供您真正需要的所有安全性)。您还应该考虑备份/后备引脚,以便在您的主证书受到损害并需要撤销时使证书轮换更容易。
尽管如此,在这种情况下可能还有另一种选择。如果您的客户端(也是服务器)只连接到另一台服务器,并且您使用内部 CA,则可以将 TLS 客户端代码配置为使用仅包含该内部 CA 证书的 CA“捆绑包”,而不是使用系统范围的 CA 捆绑包。这使您可以继续使用默认的证书验证代码,它只是不会信任任何不链接到您的内部 CA 的证书。这实际上与 CA 级别的 pinning 相同,但可能更简单(尽管对验证逻辑的精细控制较少)。