往期鸿蒙全套实战文章必看:(附带鸿蒙全栈学习资料)


httpRequest.request 请求https接口ssl证书验证失败 

问题现象

https接口httpRequest.request请求报错:“SSL peer certificate or SSH remote key was not OK”。

  1. httpRequest.request怎样进行证书验证。
  2. httpRequest.request能否忽略证书认证访问https接口。

解决措施

HTTPS证书是一种数字证书,这种证书的主要作用是保护网站安全性。HTTPS证书校验则是指在建立HTTPS连接时对证书进行校验,保证连接的安全性,使网站的安全性更高。

HTTPS校验主要包括以下几个步骤:

  1. 客户端向服务器发送HTTPS请求
  2. 服务器返回SSL证书
  3. 客户端对证书进行校验
  4. 如果验证通过,客户端和服务器之间就建立起了安全的HTTPS连接。

本题中的报错出现在第三步,即客户端对证书校验报错。

客户端对证书的校验验证SSL证书的四个方面:

  1. 检查SSL证书是否是由浏览器中“受信任的根证书颁发机构”颁发。
  2. 检查SSL证书中的证书吊销列表,检查证书是否被证书颁发机构吊销。
  3. 检查此SSL证书是否过期。
  4. 检查部署此SSL证书校验的网站域名和证书域名是否一致。

客户端如果没有对证书进行校验,就会导致中间人攻击,中间人攻击分两种:SSL劫持和SSL剥离。

SSL劫持原理:第三方攻击者会先把自己接到请求方和接收方之间,然后通过自己伪造的证书先模拟成接收方和请求方交换数据,然后再模拟自己为请求方与接收方进行数据交互。一般SSL劫持容易被用于使用者在自己的浏览器等地方安装了未被权威CA认证的证书,因此需要进行证书校验。

图1 SSL劫持

SSL剥离通常发生在HTTP请求中,不过现在的网站大部分强制使用HTTPS访问网站,这里不再赘述。

问题1:开发者应对服务端的证书进行上述四个方面的检查,确认无误。若服务端证书是自定义的CA,即SSL证书不是由浏览器中“受信任的根证书颁发机构”颁发,可以通过使用httpRequest.request接口的HttpRequestOptions参数中的caPath设置自定义CA的路径,如果设置了此参数,系统将使用用户指定路径的CA证书,(开发者需保证该路径下CA证书的可访问性),否则将使用系统预设CA证书,系统预设CA证书位置:/etc/ssl/certs/cacert.pem。

问题2:当前不支持忽略证书验证的能力。客户端需要对证书进行验证,否则会导致中间人攻击。

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐