Mat*_*son 2 authentication ssl google-app-engine client-certificates google-cloud-endpoints
CONTEXT
使用Google Cloud Endpoints(Python)创建了一个API,许多低功耗设备将使用这些API获取/发布数据.
与API的唯一通信将来自这些自定义设备(我拥有通信的两端).
研究
查看身份验证,希望它就像使用SSL/TLS客户端证书一样简单:
但是,似乎只支持oauth2; 我正在寻找一种"干净"的方式来实现"手动"身份验证,理想情况下利用客户端设备上已有的客户端SSL证书.
我已经调查了创建"服务"oauth2帐户,但是因为我想要防止欺骗另一台设备的设备(一组所有的凭据都是不可接受的),我需要为每个客户端设备生成一个服务帐户,这将是在API端保持庞大和可怕.
似乎我迫不及待需要在我的代码中为每种API方法添加一层身份验证,这在某种程度上忽略了利用Google云终端服务的重点.
问题......最后
有没有人有经验验证"手动关闭"机器到大规模机器设备对谷歌的云端点?
有没有人知道在Oceuth2认证过程中使用客户端证书的方式是否会得到GCE支持的方式?
根据POST/GET标头中的一些加密数据,我唯一的选择是在API方法中进行自定义身份验证.(或者只是转向使用Apache/NGINX和client-cert auth托管API?)
问候,马特
我给你写了一篇文章:
考虑到云端点基本上存在于OSI模型的应用层中,因为它通过HTTPS请求进行通信(它在TLS会话中发送HTTP请求).端点是否使用HTTP或HTTPS不是开发人员可配置的选项 - 它必须是HTTPS.
它使用HTTPS,因为API服务器具有TLS证书,用于验证API服务器.在安全连接内部,RPC参数和响应也可以防止窃听.这是端点与TLS"交互"的程度 - 它使用它来建立会话并在此会话中发送HTTP请求.
因此,我已经可以告诉您,在连接设置阶段,您将无法使用用于通过端点自动验证API客户端的TLS客户端证书(不是常用功能).Endpoints API服务器不会查看或请求TLS客户端证书.
现在,虽然通过API服务器的TLS证书可以保证API服务器本身的身份验证,但API 客户端的身份验证是通过客户端ID或用户API完成的,这些API位于您的代码中,并通过App Engine目前提供的不同身份验证选项进行抽象:
因此,为了以这两种方式之一授权您的客户端设备并仍然利用云端点,您需要找到一种方法让每个设备执行OAuth流或OpenID流,您的系统已为其配置了身份该设备初始部署时的相应auth方法.
Google(应用)帐户选项
这将涉及为每个设备创建一个Google帐户(Google的统一SSO)或由自定义域管理的Google Apps帐户,并将这些帐户的凭据配置到每个相应的设备.您可以在此处详细了解有关自定义域身份验证和App Engine身份验证配置的信息.
OpenID选项(使用GAE的OpenID的一般文档)
这将涉及使用类似pyoidc的OpenID连接库在GCE实例上设置您自己的OpenID提供程序,以便您可以自己配置帐户,或者可能涉及为每个设备注册具有已知OpenID提供程序的帐户.第一个解决方案更强大但更耗时(OpenID提供商可以暂时关闭,或永久停用,然后您的IOT网络运气不佳).
第三个选项使用客户端ID
您当然可以生成"已安装的应用程序"客户端ID /机密,并将这些内容分发给网络中的每个设备.他们可以使用它来验证自己作为网络设备(而不是攻击者的笔记本电脑),然后您相信设备可以准确地将自己的ID报告为每个API调用的参数.根据您的设备的破解程度以及您打算如何广泛分发它们,此方案并不一定会阻止设备欺骗彼此的ID,尽管取决于ID生成方案,您可以使其非常困难(每个ID都很长)足够长的哈希).
如果你走这条路并且你真的很担心这个问题,你可以为每个设备配置一个客户端ID,但谁知道你是否会对每个应用程序的客户端ID数量达到某种未记录的限制,这也需要您可以手动执行此操作,也可以编写一个脚本,在无头浏览器上登录开发控制台并执行您需要的操作.
实际使用TLS客户端证书的第四个疯狂选项
如果你真的开始为你的API 使用auth 和云端点的TLS客户端证书,你可以尝试在请求中发送客户端证书,因为TLS正在加密请求数据(除非你的攻击者找到了有效的方法)解决逆离散对数问题,在这种情况下,他们可能太忙于攻击更重要的目标(没有冒犯)并永远改变信息安全游戏),然后以某种方式在你的端点方法中读取和授权证书(第三方)与您的应用程序一起上传的库可能是必要的).
第四个现实选项,如果您的心脏设置在TLS客户端证书上
从App Engine切换到Compute Engine,您基本上可以在相同的数据中心管理和托管VM.在此框中,您可以在任何您喜欢的端口上实现任何类型的连接协议,因此您可以根据连接设备的客户端证书对传入的API请求(而非端点,通知)进行TLS身份验证.
祝好运!
| 归档时间: |
|
| 查看次数: |
785 次 |
| 最近记录: |