3

我的特定用例是我必须访问存储在客户端上的数字证书,并使用它们在客户端和服务器端执行签名、验证、加密和解密的任务。对于后面的部分,有很多很多的解决方案。症结在于能够访问存储在客户端上的证书。

请注意,我说的是“存储在客户端上的证书”,这是故意含糊不清的。我不想将想法限制在系统存储、用户存储、浏览器存储、加密令牌、java 密钥存储等任何地方。

多年来,我使用了以下方法。在他们每个人旁边,我给出了优点和缺点。

  1. CAPICOM/ActiveX。虽然这是最容易使用的,但它限制了用户在 Windows 上使用 IE。更糟糕的是,它现在已被弃用,仅适用于 32 位。
  2. Java 小程序。这是跨平台和跨浏览器的,但浏览器中的 java 并不像人们希望的那样普遍,并且正在迅速消失(显然 Apple 最近删除了它)。因此,让用户下载和安装 JRE 更加麻烦。此外,用户必须执行相对技术性的任务,即为签名者设置无限强度的加密扩展才能工作。

我听说过/想到过但进展不大的事情

  1. 大多数 JavaScript 解决方案。他们实现了 RSA 算法,但他们没有办法访问客户端证书存储中的数字证书。他们中的大多数会生成一个新的密钥对。
  2. 闪光/弹性。Flash/flex 似乎是最普遍的客户端技术。他们已经可以访问摄像头和麦克风等客户端硬件。如果他们可以访问证书存储区,那就太好了。
  3. 微软网站上给出的 CAPICOM 的替代方案。它规定了 CAPICOM 的替代方案,这些替代方案主要是使用 .NET 框架做事。这对于桌面客户端非常有用。但是对于“脚本”,他们在“重要说明”中非常清楚地说明您必须编写自己的 activex 控件。这让我们回到了第一方。

我正在寻找的是一种方法来克服/解决访问客户端上的证书存储的主要问题。我不是在寻找关于 RSA 算法的讨论,或者为什么 PKI 是愚蠢的,或者是非对称加密的替代方案,或者使用 Web 应用程序以外的架构,或者在 Apple 上。

4

3 回答 3

2

我最好的选择仍然是小程序,因为这可能是最跨平台的东西。或者,我可以开发自己的 activeX 并限制我的范围。

请记住,客户端证书访问是重要的安全事项。

于 2012-11-05T08:07:06.810 回答
0

我们的 SecureBlackbox 库有一个分布式加密插件,可以满足您的需求。目前客户端模块进行签名,但可以由用户扩展(我们提供完整的源代码)。您将在我们的网站此 SO 答案中找到附加组件的详细说明。

于 2012-11-05T10:13:01.933 回答
-1

[披露:我为 CoSign 工作]

将证书存储在客户端上的一种安全替代方法是将它们存储在安全的集中式 SSCD(安全签名创建设备)上。本地证书(智能卡等)的一个问题是在客户端/服务器或基于 Web 的应用程序中安全地使用它们。

集中式 SSCD 可以非常巧妙地处理这个问题。用户仍然需要向SSCD验证自己的身份,但 SSCD 本身持有证书并进行签名。身份验证步骤可以包括 2 因素身份验证,包括一次性密码 (OTP)、生物识别等。我们有客户在做所有这些。

这个想法是拥有安全的客户端身份验证,但将安全签名集中作为网络上的一项服务。

请参阅此说明。也可作为基于云的解决方案提供。

ps,此答案涵盖了如何安全登录基于 Web 的应用程序的更一般的问题。我同意它不包括使用用户的智能卡或客户端替代品进行签名的具体问题(OP 故意含糊不清)。

于 2013-06-14T07:32:20.270 回答