我的公司正在推出基于云的SaaS服务。将会有来自不同租户的客户通过相互SSL连接到我们的服务。
客户端将使用我们提供的库连接到服务。这个基于Java的库将使用密钥库和信任库执行相互SSL。所以服务器和客户端都在我们的控制之下。需要强调的是,在整个通信过程中不存在浏览器。
为了成功地执行相互SSL身份验证,他们必须信任我们的云服务提供的证书。该证书可以是:
我遇到的另一个选项是使用某种SSL钉扎(证书或公钥)来覆盖信任链。这不是一个容易实现的解决方案。
推荐的解决方案是什么?
发布于 2018-12-11 12:08:11
考虑到客户机和服务器都完全在您的控制范围内,我认为只依赖自颁发的证书是最好的(也可能也是最简单的),这样您就不需要信任超出您控制范围的外部CA了。
如果您只有几个通信对等点,那么使用自签名证书并在需要时进行交换可能很容易。请注意,在这种情况下,您可以简单地将密码钉到特定的证书或公钥上,而忽略任何过期、撤销等,因为一切都在您的直接控制范围内。
使用更多的通信对等点,最好创建您自己的PKI结构,即拥有您自己的根CA,它为客户端和服务器颁发证书,并且还可以更新和撤消证书。一旦建立了这个PKI,通信对等点的管理就简化了,因为他们只需要信任这个特定的CA (而且只有这个CA)。已经可以用openssl创建一个简单的PKI结构,但是也有一些商业产品可以提供更好的可用性和扩展性。
考虑到您对客户端和服务器都有完全的控制权,实际上可以启动简单和廉价的(自签名证书),增长缓慢,但保持廉价(基于openssl的CA),然后在涉及大量客户端时转向(不太便宜)企业CA。
https://security.stackexchange.com/questions/199536
复制相似问题