我开发了一个 REST API,它被配置为仅通过 HTTPS 运行。此 API 的唯一目的(至少目前)是作为移动应用程序的后端入口点运行。
我推出了用于客户端身份验证的自己的令牌身份验证协议(请参阅此问题/答案)。这背后的主要原因是能够生成安全/可重复使用的令牌,客户端可以在本地存储这些令牌并在后续请求中重复使用。由于我可以控制这些令牌服务器端,因此我可以强制客户端重新进行身份验证(即生成新令牌)过期/无效,并且我还采取了预防措施来避免类似中间人/重播攻击。为此,必须有一些敏感信息以纯文本形式通过网络传递,但是,一切都通过 SSL 运行,因此 AFAIK 没有什么可担心的(?)。
不过,目前的设置有几个部分确实让我担心:
对于服务器身份验证,当应用程序收到服务器证书(自签名)时,我只检查证书主题(例如 CN=域名)是否与 API 地址相同,即 API 入口点是否为 api.mydomain.com它必须接收主题为 CN=api.mydomain.com 的证书,否则 SSL 会话将失败。
从服务器的角度来看,匿名请求没有保护。客户端身份验证仅发生在检查标头/帖子信息的地方。我相信这可能会为 Dos 攻击敞开大门。理想情况下,我希望服务器只接受来自已知来源的请求。
我对第一个问题的担忧是它太容易规避了,api 地址可以从应用程序设置中配置,任何人都可以生成自签名证书,因此欺骗应用程序认为它正在与正确的服务器通信是相当简单的. 第二个问题只是一个普遍关注的问题,但是,如果我可以过滤掉任何未经身份验证的客户端请求,那将是一个奖励!
唯一想到要解决的问题(至少是第二个问题)是引入客户端证书。我关心的是实施时间、部署的复杂性和证书本身的管理。我想我正在寻找一些关于(基于当前设置)向设备引入客户端证书是否会在这里获得任何东西的建议?