相互 TLS(又名客户端身份验证)是对此的解决方案。
至于颁发证书,我不会那样做。我会从客户端获取自签名证书,并以某种方式将它们直接固定给委托人(用户)。我将有一个由通用名称和证书公钥索引的查找表来执行此操作。这使得证书撤销(删除行)和 CA 妥协(不涉及)等潜在问题变得更加容易。
或者,您可以向客户请求 CSR 并使用您信任的 CA(如果您的组织具有适当保护它的专业知识和资源,则可以是第三方或您自己的内部 CA)签署它们。
这是来自 The Code Project 的一个很好的高级描述,他们有 .NET 示例代码来演示它:
相互SSL认证或基于证书的相互认证是指双方通过验证提供的数字证书来相互认证,从而确保双方的身份。在技术方面,它是指客户端(Web 浏览器或客户端应用程序)向服务器(网站或服务器应用程序)验证自己,并且该服务器还通过验证受信任证书颁发的公钥证书/数字证书向客户端验证自己当局 (CA)。由于身份验证依赖于数字证书,因此 Verisign 或 Microsoft Certificate Server 等证书颁发机构是相互身份验证过程的重要组成部分。从高层的角度来看,
- 客户端请求访问受保护的资源。
- 服务器将其证书提供给客户端。
- 客户端验证服务器的证书。
- 如果成功,客户端将其证书发送到服务器。
- 服务器验证客户端的凭据。
- 如果成功,服务器将授予对客户端请求的受保护资源的访问权限。
来源: http: //www.codeproject.com/Articles/326574/An-Introduction-to-Mutual-SSL-Authentication