2012-02-24 38 views

回答

7

如果只有你的客户和你的服务器,你可以(也应该)使用SSL无需购买任何东西。您控制服务器和客户端,因此每个应只信任一个属于另一个的证书,并且您不需要CA用于此目的。

这是高层次的方法。创建一个自签名服务器SSL证书并部署到您的Web服务器上。为此,您可以使用Android SDK附带的keytool。然后创建一个自签名客户端,并将其作为资源部署在您的应用程序中的一个自定义密钥库中(keytool也会生成这个)。将服务器配置为需要客户端SSL身份验证,并仅接受您生成的客户端证书。配置客户端使用该客户端证书来标识自身,并且只接受您在服务器上安装的那一部分服务器端证书。

这是一个比这里保证的更长的答案。我建议分步实施,因为网上有资源介绍如何处理Android中的自签名SSL证书,包括服务器和客户端。在O'Reilly出版的书中有一个完整的步骤,Application Security for the Android Platform


你通常存储在sometype。这时候的密钥库证书/私钥(密钥库,如果你使用的是Android)和密钥库将被加密。该加密基于密码,因此您需要(1)将密码存储在客户端的某处,或(2)在启动客户端应用程序时询问用户密码。你需要做什么取决于你的用例。如果(2)可以接受,那么你已经保护了你的凭证免受逆向工程,因为它将被加密并且密码将不会被存储在任何地方(但用户需要每次都键入)。如果你做了(1),那么有人能够逆向工程你的客户端,获取密码,获得密钥库,解密私钥和证书,并创建另一个能够连接到服务器的客户端。

没有什么可以做,以防止这种情况;你可以更难地对你的代码进行逆向工程(通过混淆等),但是你不能让它变得不可能。您需要确定您尝试采用这些方法缓解的风险是多少,以及需要做多少工作才能缓解风险。

+0

某人有可能从应用程序中窃取此证书并将其用于假应用程序中? – pyeleven 2012-02-24 15:00:51

+0

是的。请参阅上面的修订答案。 – jeffsix 2012-02-24 15:07:58

+0

这是足够的信息来作出我们的决定,谢谢!我想了解Android应用程序证书是如何与所有这些相关的,你能指出我的方向吗?我的意思是应用程序证书可以用作客户端SSL证书吗? – pyeleven 2012-02-24 15:18:39

1

如果你是绝对肯定这个Web服务将只需要通过授权的应用程序/设备访问,与客户端的SSL证书去并将服务器上的访问限制为只有拥有授权证书的客户端。这具有在任何时候都强制使用SSL的特性,所以您不喜欢通过公开频道授权的秘密。下面是Apache的一个快速指导,但你可以使用nginx的太:

http://it.toolbox.com/blogs/securitymonkey/howto-securing-a-website-with-client-ssl-certificates-11500

+0

此证书是否可以被其他应用程序复制?该应用程序是否可以利用该服务? – pyeleven 2012-02-24 14:56:28

相关问题