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