X.509数字签名/加密工作流程/库推荐?

时间:2012-11-05 08:00:57

标签: cross-browser cross-platform public-key-encryption digital-certificate

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

请注意,我说的是“存储在客户端的证书”,这是故意模糊的。我不想把想法限制在系统商店,用户商店,浏览器商店,加密令牌,java密钥库,无论如何。

多年来,我使用了以下方法。除了他们每个人,我给出了利弊。

  1. CAPICOM /的ActiveX。虽然这是最容易使用的,但它限制用户在Windows上使用IE。更糟糕的是,它现已被弃用,仅适用于32位。
  2. Java applet。这是跨平台和跨浏览器,但浏览器中的java并不像人们希望的那样普遍,并且很快就消失了(显然Apple最近删除了它)。因此,让用户下载并安装JRE会增加麻烦。此外,用户必须执行相对技术性的任务,即为签名者设置无限强度加密扩展。
  3. 我听到/想到的事情,但我没有取得进展

    1. 大多数javascript解决方案。他们实现了RSA算法,但他们没有办法在客户端证书存储上访问数字证书。他们中的大多数会生成一个新密钥对。
    2. 闪光/ Flex的。 Flash / flex似乎是最普遍的客户端技术。他们已经可以访问客户端硬件,如相机和麦克风。如果他们可以访问证书商店那将是可爱的。
    3. 微软网站上给出的CAPICOM的替代方案。它规定了CAPICOM的替代方案,它们大多使用.NET框架。这非常适合桌面客户端。但对于“脚本”,他们非常清楚地在“重要说明”中说,你必须编写自己的activex控件。这让我们回到原点。
    4. 我正在寻找的是一种克服在客户端访问证书存储的主要问题的方法。我不是在寻找有关RSA算法的讨论,也不是为什么PKI是愚蠢的,或者是非对称加密或使用除Web应用程序之外的架构或Apple上的替代方案。

3 个答案:

答案 0 :(得分:2)

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

请记住,客户端证书访问是一件很安全的事情。

答案 1 :(得分:0)

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

答案 2 :(得分:-1)

[披露:我为CoSign工作]

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

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

我们的想法是进行安全的客户端身份验证,但将安全签名集中作为网络上的服务。

description。也可作为基于云的解决方案。

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