2014-07-04 37 views
12

我有一个Web服务器,只允许使用X509身份验证访问。奇迹般有效。现在我想使用X509证书(存储在用户的浏览器密钥库)的延伸到使用JavaScript访问浏览器Keystore中的签名/加密 - 示例代码? (WebCryptoAPI)

  • 注册数据之前(使用JavaScript和HTTPPost)读取
  • 解密数据被发送到服务器服务器

(此时它被使用存储有用户的公钥加密的),我发现这个例子做RSA Signature这是非常接近....只是它确实需要从HTML文本区域的关键。我想从密钥存储区读取它。现在密码是相当的流量:

我正在寻找的签名和加密的一些工作实例(我有一些在Java中,但不是基于浏览器的JavaScript)。

帮助是非常赞赏

+1

相关:我一直在下面W3C的WebCrypto已经有几年了。我认为他们准备发布他们的第一个标准。尽管如此,它在某些地区会有点贫血。例如,它不会有BigInteger(请参阅[关于BigInteger操作的问题](http://lists.w3.org/Archives/Public/public-webcrypto-comments/2013Sep/0007.html))。但是您应该可以使用RSA签名(请参阅[“SubtleCrypto'签名方法”(https://dvcs.w3.org/hg/webcrypto-api/raw-file/tip/spec/Overview.html#dfn-SubtleCrypto-方法-SIGN))。 – jww

回答

13

因一时W3C的WebCrypto标准规定内window JavaScript对象crypto使用JavaScript进行加密,数字签名,生成密钥等。但是,访问本地密钥库以执行像客户端密钥签名这样的操作的标准方式没有定义。所以现在在JavaScript中没有一种常见的方式来实现,每个浏览器都有自己的方式;在IE中,你可以使用ActiveXObject("CAPICOM.Store");,使用window.crypto.signText("textToSign", "ask");(看起来现在它的弃用版,看看here,实际的api似乎不支持它:more info here),对于Chrome我不确定但是使用NativeSDK Client可能会一种可能的方式。

其他的可能性也是使用java applets,这个技术有这些天的所有问题。

在github上还有一个项目,它在javascript中封装了使用具有两个实现的通用对象的行为(仅使用IE和Firefox),我尝试了几个月,并且正确地使用IE/Firefox,现在与Firefox不工作,因为API选项已被弃用,如果你好奇看一看:Glamdring/js-signer

您还可以检查我的问题,我问类似的问题:js signature on chrome with OS keystore

希望这有助于

+0

如果您可以提供适用于Firefox和/或Chrome的有效代码示例,那么积分就是您的。为什么不是IE?我的用例没有Windows机器。一个项目的链接是不够的。工作代码! – stwissel

+0

现在我有一个java applet来执行数字签名,我不写代码来用javascript签名,因为这个功能还没有标准化,并且不断变化(从34版本开始,firefox就删除了这个功能,因为它不是一个标准)所以如果你想要一个(暂时)工作代码......你自己写':)'。 – albciff

+0

Java在手机上无法使用。猜猜我的赏金并没有给我带来任何好处 – stwissel

1

GlobalSign/PKI.js支持X.509证书。

公钥基础设施(PKI)是如何在网络上执行标识和密钥管理的基础。 PKIjs是一个纯粹的JavaScript库,实现了在PKI应用程序中使用的格式。它 构建于WebCrypto(Web加密API)上,并且致力于使其构建可利用 来构建利用X的本地Web应用程序。509和 相关格式的网页上没有插件。

+0

有趣的图书馆。然而这些例子闪避了“访问本地密钥库”主题。所以它不是存在就是不可见。另外,“开放源代码”声明与版权不符,这是非认可的OpenSource许可证。 – stwissel

2

无法在浏览器中访问“本地密钥库”。浏览器慢慢删除访问违反浏览器强制执行的“同源”策略的内容。这包括诸如插件,凯基标签等

PKIjs在心中与同源策略PKI建成,这里是一个后我就这个话题做了 - https://unmitigatedrisk.com/?p=503

+0

其实.... WebCrypto API有登录(),它可以访问任何“本地密钥库” - 文件,智能卡,USB令牌https://www.w3.org/community/webcryptoapi/draft/ – stwissel

+2

其实这是2010年的形式,这是2016年,它不 - https://www.w3.org/TR/WebCryptoAPI/ – rmhrisk

+0

是的。悲伤的事态。不知道智能卡提供商如何做 – stwissel