iphone:是不是有任何安全的方法可以从应用程序建立 2-way SSL

Posted

技术标签:

【中文标题】iphone:是不是有任何安全的方法可以从应用程序建立 2-way SSL【英文标题】:iphone: is there any secure way to establish 2-way SSL from an applicationiphone:是否有任何安全的方法可以从应用程序建立 2-way SSL 【发布时间】:2011-02-16 00:53:32 【问题描述】:

我需要建立从我的 iPhone 应用程序到客户服务器的 HTTPS 2-way SSL 连接。 但是,我没有看到任何安全的方式将客户端证书传递给应用程序(它是一个电子银行应用程序,因此安全性确实是一个问题)。 到目前为止,我发现应用程序能够访问证书的唯一方法是将其与应用程序本身预先捆绑在一起,或者公开一个可以从中获取它的 URL (IPhone app with SSL client certs)。

问题是这两种方式都不能阻止某些第三方获取证书,如果将其作为风险接受,则无需 2-way SSL(因为任何人都可以拥有客户端证书)。

整个安全协议应如下所示: - HTTPS 2-way SSL 来验证应用程序 - 基于 OTP(令牌)的用户注册(在此步骤生成客户端密钥对) - SOAP / WSS XML-Signature(由之前生成的密钥签名的请求)

关于如何建立第一层安全 (HTTPS) 的任何想法?

【问题讨论】:

您是否被要求进行 2 因素身份验证或 2 路 SSL :p 两件不同的事情。 2-way SSL 在理论上很好,但是在双方设置证书存储和交换证书时会很麻烦。 不要忘记,如果您的应用确实对您的客户有用,证书将在某个时候过期。所以不要认为初始设置是这个问题的结束。您可能必须将 CSR 生成添加到您的应用程序中,并让您的 IT 人员提供这些东西(在发出响应之前,是否会手动检查 CSR 上的指纹和应用程序 UI 中的原始证书是否足够满足您的目的?)。 我猜是 2way SSL。我需要的是通过确认(通过证书)客户端确实是我的应用程序来建立到服务器的 HTTPS 连接。我们的计划是为所有用户提供一个证书,因此不需要为每个用户管理证书,因为这是在比 http 更高的级别上完成的。目前,我们正在考虑将加密证书与应用程序捆绑在一起,并将解密密钥放在字节码中的某个位置。这不是***安全性,但对于这一层来说应该足够了。关于如何更好地保护解密密钥的任何想法? 在您的应用程序中构建第一个密钥的问题是它很容易破坏您的系统。 Bruce Schneier 是更好的初始安全方法的良好起点。 我要吹掉这个问题的灰尘。您是如何使用此解决方案的? 【参考方案1】:

好的,所以回答我自己的问题...

事实证明,证券没有固定的衡量标准。 只要制动系统的成本大大高于这样做的奖励,就可以满足安全要求。

在我的情况下,我们谈论的是电子银行系统,但每月限额较低(几千美元)。 正如我在我的问题中提到的那样,在 HTTPS 之上还有另一层安全层,它将具有 WSS XML 签名。注册用户和接受他的公钥的过程也分几个步骤完成。在第一步中,用户将他的电话号码与以某种方式从我的客户那里检索到的鳕鱼一起发送。然后将带有确认码的 SMS 发送给用户。用户将确认代码输入到 OTP 计算器中,该计算器将生成用于识别用户的 OTP 代码。然后将公钥与 OTP 代码一起发送到服务器。从这里开始,每个请求都将由之前发送到服务器的公钥的私有对应方签名。

因此,整个过程的最大弱点是有人对应用程序进行逆向工程并检索用于 SLL 的客户端证书。由此产生的唯一问题是有人可能会观察用户的交易。然而,为了让某人进行交易,他需要用户的私钥,该私钥被生成、加密并存储到钥匙串中。而且制动这个安全级别的代价是非常高的。

我们还将考虑如何在更高级别上保护用户的数据(例如使用 WSS 加密),但首先我认为我们对当前的解决方案很好。

有什么意见吗?

问候

【讨论】:

【参考方案2】:

https 并不是这样工作的。简而言之,您连接到一个安全服务器,证书由知名机构签署。

如果您为此使用 Apples (iPhone) 类,它们将只接受“良好”证书。好的,我的意思是苹果认为可以接受的。如果您不使用它们(SDK 中有替代方案),您将无法连接(除非您拥有“企业”开发人员许可证 - 但我不能这样说100% 确定,因为我还没有看足够多的许可证来确定)

要继续,请使用您的 https 连接到您正确签名的网站,然后使用内置用户名/密码进行某种登录,或根据 iPhone 的唯一 ID(例如)进行质询/响应,并使用交换密钥那个连接。

请注意,这意味着您的应用程序必须在(每个连接/每 X 个连接/每个月/应用程序指定的时间间隔)查询新证书以使它们保持最新。然后,您可以使用这些证书连接到更安全的服务器。

[编辑]

查看this 帖子 - 可能有更多关于您要做什么的信息

[/编辑]

[编辑2]

请注意,请求是 iphone,而不是 OSX - 应用商店批准是一个问题

[/edit2]

【讨论】:

我认为您的工具箱中缺少一个概念:相互身份验证。这就是 OP 所要求的。 @Jason 他不相信客户端身份验证可能使用 ssl,这就是为什么我给他一个 -1 所以有“无法进行客户端身份验证”,然后是“无法使用此库进行客户端身份验证”。我无法与 iPhone 库交谈,因为我是个菜鸟,但我的队友不得不换掉一些库,因为他们无法让客户端身份验证工作,或者没有足够的配置参数来制作它不是脑死亡。 在我对图书馆的使用中,图书馆要求证书是“好”的。苹果“好”。因此,不允许您准备然后在客户端和服务器之间共享的证书。做到这一点的唯一方法是使用 Apple 明确禁止的类 - 会阻止您的应用程序获得批准的类。 @Rook - 客户端身份验证在 iphone 上是不可能的,至少,不像你希望他那样做。

以上是关于iphone:是不是有任何安全的方法可以从应用程序建立 2-way SSL的主要内容,如果未能解决你的问题,请参考以下文章

带有 IPHONE 的亚马逊 sns 是不是可以离线使用..如果没有,有啥方法可以实现吗?

是否有任何方法可以通过 Google 凭据登录 iphone 应用程序

iPhone Dev - 关于自动释放以及我正在做的事情是不是安全的问题

是否有任何将图像转换为文本格式的 iphone 类?

从 iPhone 中的视频帧中获取图像

使用Notch以编程方式识别iPhone