我正在设置一个Android应用和iPhone应用将连接的服务器。我想知道什么类型的安全性对于发送/请求数据更安全?
目前,我生成了一个HMAC-SHA256内容,我将在标题中发送到服务器以验证其完整性。 但我想知道使用https连接是否更安全?如果我使用https,我可以跳过HMAC吗?
我想知道安全性的差异,哪个更安全?
而且,如果我使用其中任何一种,那么最好同时使用它们来获得额外的安全层吗?
答案 0 :(得分:6)
快速回答您的问题:SSL如果使用得当,应该比HMAC提供更多的安全保障。因此,通常可以使用SSL来消除对HMAC的需求。
HMAC提供完整性和真实性。假设客户端和服务器使用预共享对称密钥来计算HMAC,一方可以确定另一端的设备具有密钥。这提供了服务器和客户端的真实性。
此图片中缺少的内容(仅限HMAC)是机密性。服务器和客户端之间交换数据的性质是什么?在通信过程中是否有任何敏感的用户数据被传输,您不希望中间人看到?如果是这样,那么您可能想要使用SSL。
SSL为您提供机密性(除其他外)。这意味着您可以确定您具有安全的端到端连接,并且没有中间人可以查看服务器和客户端之间正在交换的数据。但是,常见的SSL使用不包括客户端计算机身份验证。例如,当您访问他们的https网页时,您的网络浏览器会检查Paypal的真实性。但Paypal服务器不会要求您的浏览器从您身边发送任何证书。
由于您将SSL与HMAC进行比较,我假设您关心双方的真实性。因此,将SSL与服务器和客户端身份验证结合使用。这基本上意味着他们都会要求彼此的证书并检查证书的不同方面(即公共名称,证书颁发者等)。您可以创建自己的证书颁发者来签署这些证书。
如果您正在为AppStore或Google Play制作应用程序,用户只需安装并开始使用,您可能需要考虑如何生成,签署或签署客户端证书。您可以通过采用类似于GitHub's的模型来消除对客户端证书(和签名)的需求,其中用户手动通知服务器可信公钥以验证设备。但你可能会看到这个过程可能不是用户友好的。