如何以及使用什么服务器证书与android SSL客户端证书身份验证

我正在开发一个支持网络的Android应用程序,它使用SSL客户端证书来验证和保护与我的服务器的连接.

我有两个问题:(1)我应该使用自签名服务器证书还是商业证书?并且(2)我应该在用户安装的apk文件中包含服务器证书,还是应该让应用程序连接到我的服务器以通过网络获取服务器证书(为了使设备信任服务器证书)?

当我问我“应该”做什么时,我会问每个选择有什么好处和坏处?

现在我正在使用apk文件中包含的自签名证书.当用户第一次运行应用程序时,它会将包含的自签名证书读入信任存储区,以便设备连接到我的服务器而不会有任何投诉.我想如果我使用商业证书,那么我的问题#2可能没有实际意义,因为设备可能信任来自服务器的证书而没有任何问题.

一个可能相关的细节:这个应用程序没有通过Android市场分发.用户将从我的服务器下载应用程序,因此我可以包含我想要的任何服务器证书,如果需要,可以包括每个用户的不同服务器证书.

我对我的两个问题的每个可能答案的各种优点和缺点都有自己的想法,但我对其他人 – 希望有安全意识 – 对此事有所说明感兴趣.

提前致谢!

最佳答案
我认为没有理由不进行自我签名.不过,我会把它提升一个档次,并创建了我自己的证书授权.这使您可以确保只连接到具有由自定义CA签名的证书的服务器,这比服务器上的证书的简单指纹检查要好得多(即实际加密安全性).

这是一个如何使用Ruby的OpenSSL绑定创建自定义CA的示例.大多数语言的程序都是一样的. https://github.com/augustl/ruby-openssl-cheat-sheet/blob/master/certificate_authority.rb

您当然也可以使用必须由自定义CA签名的客户端证书,以便服务器接受请求.请注意,这只是默默无闻 – 攻击者将能够从您的应用中提取私钥和自定义CA签名证书.如果您的应用可以向服务器发出请求,任何人都可以:)

转载注明原文:如何以及使用什么服务器证书与android SSL客户端证书身份验证 - 代码日志