为了通过HTTP实现RESTful API,我需要一种保护通信的方法(加密通信,防止中间人和重放攻击)。
API应该用于软件PC客户端(Windows,Linux),智能手机,硬件客户端和嵌入式设备(服务器)之间的通信。
如果我将HTTPS与其中一个使用(所有嵌入式设备都可以使用我认为的同一个)自签名证书(客户端已经嵌入/存储在某个地方)我可以获得我想要的所有好处。
现在我有一个问题:
由于始终通过IP地址访问嵌入式设备,因此客户端主机检查证书将失败。无论证书中写的是什么都不会成为回答的主持人。
E.g。使用libcurl我必须通过
禁用检查curl_easy_setopt(curlEasyHandle, CURLOPT_SSL_VERIFYHOST, 0L);
这对自编客户来说并不会太糟糕 - 但客户也应该由第三方开发人员编写。我现在觉得很尴尬的是,第三方必须知道,他们必须禁用主机检查(并且他们必须这样做......)。 此外,我不确定是否可以使用第三方正在使用的任何http / TLS库来禁用此检查。
为IP地址颁发的证书(如果可能的话?!)不是一个选项,因为设备的用户可以更改IP地址。
证书是否有办法让主持人保持中立"?或者我的方法的一部分不正确,我应该采取不同的做法?或者没有什么可以做的,每个人都这样实现它?