通过HTTP安全RESTful API:如何处理没有主机名(仅IP地址)的证书主机检查?

通过HTTP安全RESTful API:如何处理没有主机名(仅IP地址)的证书主机检查?,rest,security,http,ssl,https,Rest,Security,Http,Ssl,Https,为了通过HTTP实现RESTful API,我需要一种安全通信的方法(通信加密、防止中间人攻击和重放攻击) API应该用于软件PC客户端(Windows、Linux)、智能手机、硬件客户端和嵌入式设备(服务器)之间的通信 如果我将HTTPS与一个(所有制造的嵌入式设备都可以使用相同的一个)自签名证书(客户机在某处嵌入/存储)一起使用,我将获得我想要的所有好处 现在我有一个问题: 由于嵌入式设备总是通过IP地址访问,因此客户端主机对证书的检查将失败。无论证书上写的是什么,都不会是回答问题的主机 例

为了通过HTTP实现RESTful API,我需要一种安全通信的方法(通信加密、防止中间人攻击和重放攻击)

API应该用于软件PC客户端(Windows、Linux)、智能手机、硬件客户端和嵌入式设备(服务器)之间的通信

如果我将HTTPS与一个(所有制造的嵌入式设备都可以使用相同的一个)自签名证书(客户机在某处嵌入/存储)一起使用,我将获得我想要的所有好处

现在我有一个问题:

由于嵌入式设备总是通过IP地址访问,因此客户端主机对证书的检查将失败。无论证书上写的是什么,都不会是回答问题的主机

例如,对于libcurl,我必须禁用检查通道

curl_easy_setopt(curlEasyHandle, CURLOPT_SSL_VERIFYHOST, 0L);
这对自行编写的客户机没有太大影响,但客户机也应该由第三方开发人员编写。我现在感到尴尬的是,第三方必须知道,他们必须禁用主机检查(而且他们必须这么做…)。 另外,我不确定第三方使用的任何http/TLS库是否总是可以禁用此检查

为IP地址颁发的证书(如果可能的话)不是一个选项,因为设备的用户可以更改IP地址


有没有一种方法可以使证书与主机无关?还是我的方法有一部分不正确,我应该做些不同的事情?还是说对此无能为力,每个人都这样实现它?

一个“主机中立”的证书会让证书变得毫无用处,你不这么认为吗?无论如何,这是一个非常有趣的问题,我期待着一些答案…@Hexaholic:在一般的用例中,它是无用的。同意。但对于我的用例来说,它只是一个公钥容器。那我就没事了(我想)。一个“主机中立”的证书会让证书变得毫无用处,你不觉得吗?无论如何,这是一个非常有趣的问题,我期待着一些答案…@Hexaholic:在一般的用例中,它是无用的。同意。但对于我的用例来说,它只是一个公钥容器。那我就没事了(我想)。