iPhone: 有没有一种安全的方法从应用程序建立双向SSL?

4
我需要在我的iPhone应用程序和客户服务器之间建立一个HTTPS双向SSL连接。然而,我没有看到任何安全的方式来将客户端证书传递给应用程序(这是一款电子银行应用程序,因此安全性真的很重要)。从我目前所了解的情况来看,应用程序能够访问证书的唯一方法是将其与应用程序预先捆绑在一起,或者提供一个URL以便可以获取它(带有SSL客户端证书的IPhone应用程序)。
问题在于,这两种方法都无法阻止第三方获取证书,如果将其视为风险可接受,则消除了进行双向SSL的必要性(因为任何人都可以拥有客户端证书)。
整个安全协议应该如下所示:
- HTTPS 2-way SSL用于验证应用程序
- 基于OTP(令牌)的用户注册(在此步骤生成客户端密钥对)
- SOAP / WSS XML-Signature(使用早期生成的密钥签名请求)
您有关于如何建立第一层安全性(HTTPS)的任何想法吗?

你是否被要求进行双因素身份验证或双向SSL :p 两件不同的事情。理论上,双向SSL很好,但在设置证书存储和交换证书方面会很混乱。 - Keith Adler
不要忘记,如果您的应用程序对客户实际有用,证书将在某些时候过期。因此不要认为初始设置就是这个问题的终点。您可能需要将CSR生成添加到您的应用程序中,并让您的IT人员提供这些内容(在发出响应之前,在CSR和应用程序UI上手动检查指纹和原始证书是否足够好)。 - Jason
我猜这是双向 SSL。我需要的是通过证书确认客户端确实是我的应用程序,从而建立与服务器的HTTPS连接。我们计划为所有用户提供一个证书,因此无需每个用户单独管理证书,因为这是在比http更高的级别上完成的。目前,我们正在考虑将加密证书与应用程序捆绑,并在字节代码的某处拥有解密密钥。这不是最高级别的安全性,但应该足够保护此层。有什么好主意可以更好地保护解密密钥吗? - pmilosev
将第一个密钥构建到应用程序中的问题在于很容易破坏您的系统。Bruce Schneier是更好的初始安全方法的良好起点。 - KevinDTimm
我要把这个问题重新梳理一下。你是怎么得到这个解决方案的? - Mike
2个回答

2

好的,为了回答我的问题...

事实证明,安全性没有固定的度量标准。只要破坏系统的代价显著高于做这件事情所能得到的奖励,就可以满足安全要求。

在我的情况下,我们谈论的是电子银行系统,但月限额相对较低(几千美元)。正如我在问题中提到的,HTTPS之上将有另一层安全性,其中包括WSS XML签名。注册用户和接受其公钥的过程也是分步进行的。在第一步中,用户发送他的电话号码以及从我的客户端某处检索的代码。然后向用户发送带有确认代码的短信。用户将确认代码输入OTP计算器,该计算器会产生OTP代码,用于识别用户。然后将公钥与OTP代码一起发送到服务器。从此以后,每个请求都将由先前发送到服务器的公钥的私有对应项签名。

因此,整个过程最大的弱点是如果有人反向工程应用程序并检索用于SLL的客户端证书。唯一可能引起的问题是某人可能观察用户的交易。但是,为了使某人进行交易,他需要用户的私钥,该私钥已生成、加密并存储在钥匙链中。而破解此安全级别的代价非常高。

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

您有任何意见吗?

问候


-2

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

如果您使用苹果(iPhone)的类来实现此目的,则只会接受'好'的证书。好指的是苹果认为可以接受的证书。如果您不使用它们(在SDK中有替代方案),则将无法连接(除非在拥有“企业”开发者许可证的情况下,但我无法百分之百肯定,因为我没有足够查看该许可证)

要继续,请使用正确签名的网站上的https连接,然后建立某种带有内置用户名/密码的登录或基于iPhone等设备的唯一ID的挑战/响应,并使用该连接交换密钥。

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

[编辑]

检查this的帖子-可能包含您要求做的更多信息

【编辑】

【第二次编辑】

请注意,请求的是iPhone应用程序,不是OSX - 应用商店的批准是一个问题。

【编辑结束】


@Jason他不相信SSL可以进行客户端认证,这就是为什么我给了他-1的原因。 - rook
所以有“无法进行客户端身份验证”和“使用这个库无法进行客户端身份验证”。我不知道 iPhone 库,因为我是个新手,但是我的队友们曾经不得不更换库,因为他们无法使客户端身份验证工作,或者没有足够的配置参数使其变得非常简单。 - Jason
在我使用该库时,该库要求证书必须是“好”的。苹果公司认为这是“好”的。因此,您准备并在客户端和服务器之间共享的证书将不被允许。唯一的方法是使用苹果明确禁止的类 - 这些类将阻止您的应用程序获得批准。 - KevinDTimm
@Rook - 客户端认证在 iPhone 上不可能,至少不是以你期望的方式。 - KevinDTimm
“https 并不是以这种方式起作用的。” 这是一个误称,这也可能是为什么您得了 -2 的原因。 - rook
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接