2013-03-02 46 views
1

我一直在使用Ruby on Rails开发一个Web服务器应用程序,并且使用Android开发一个客户端应用程序。 Web服务器有一些路由到客户端访问,没有身份验证。我想创建一个令牌来验证请求是否来自客户端。我想这样一个解决方案:如何在Ruby和Android应用程序之间加密和解密数据?

  1. 创建一个键,例如,“计算器;
  2. 分享此键在客户端和服务器应用程序;
  3. 使用AES加密与生成令牌生成随机字符串函数+键;
  4. 当客户端应用程序被发送到服务器的请求,也送所生成的令牌;如果令牌是有效的或不使用所述共享密钥和AES加密
  5. 服务器验证

这里是我的疑惑:

  1. 这是发展它们之间的通信的最佳方式?
  2. 是否有gem/api crypt和解密在两个系统中使用?

请不要犹豫来形容建议或例子来引导我=)

在此先感谢

回答

2

一个更加安全和标准的方式是使用SSL客户端证书。

为每个新版本的应用程序发布一个客户端证书,确保它使用只有您或您的签名CA拥有私钥的证书(即CA证书)进行签名。

在允许连接之前设置您的Web服务器以要求客户端证书。设置Web服务器以再次验证您持有的CA证书的证书。

这种方式没有“共享的秘密”,可以从您的应用程序中提取。如果有人提取并窃取客户端证书,请使用新证书发布应用的更新版本,然后将旧证书添加到您的CA撤销列表中,或者仅告诉Web服务器阻止该证书。

没有红宝石,Java或JavaScript代码要写。

+0

感谢您的回复Tim,我将研究它的工作原理和实现。如果你有很好的教程建议,请告诉我。 – hugalves 2013-03-03 05:07:21

+0

这不完全正确。通常,客户端密钥对由客户端应用程序*生成,并且使用公钥创建证书。客户端应用程序(仅限客户端应用程序)必须能够访问此客户端证书的私钥。 – 2013-03-03 12:53:55

+0

是的,你是正确的,这是正常的情况,但在这种情况下,因为你将发布一个客户端证书被许多应用程序用户共享,并且由于你确实控制了硬币的两面,客户端应用程序只需要一个您可以验证和撤销已签署的证书。如果您要为每个用户颁发证书,那么让每个用户使用自己的密钥对生成自己的证书会更合理。 – 2013-03-07 14:13:03

相关问题