Javascript 使用PKCS 7(不透明)为web签名数据

Javascript 使用PKCS 7(不透明)为web签名数据,javascript,cryptography,firefox-addon,pkcs#7,Javascript,Cryptography,Firefox Addon,Pkcs#7,摘要:有没有一种方法,可以通过Firefox插件或其他方式,使用不透明的算法来模拟javascript crypto.signText,而不是分离它当前的功能?对任意数据进行签名。这包括对话框和访问Firefox证书存储。另外,signText自1998年以来似乎没有更新过,有没有可能我的需求从那时起就得到了满足,而我却错过了它们 任何链接,提示等将不胜感激 我正在从事一个项目,在这个项目中,我需要能够使用浏览器商店的证书在firefox中使用PKCS7 CMS对数据进行签名 我的第一次尝试,我

摘要:有没有一种方法,可以通过Firefox插件或其他方式,使用不透明的算法来模拟javascript crypto.signText,而不是分离它当前的功能?对任意数据进行签名。这包括对话框和访问Firefox证书存储。另外,signText自1998年以来似乎没有更新过,有没有可能我的需求从那时起就得到了满足,而我却错过了它们

任何链接,提示等将不胜感激

我正在从事一个项目,在这个项目中,我需要能够使用浏览器商店的证书在firefox中使用PKCS7 CMS对数据进行签名

我的第一次尝试,我认为是我的救世主是window.crypto.signText,它完全按照我的要求显示要签名的文本,提示选择证书并对文本进行签名,但它是分离的,不是不透明的,这意味着签名的文本不包含在消息中

我一直在四处寻找替代方案,文档似乎很简单。我只需要使用firefox,因此有可能使用插件来实现这一点

如果我理解正确,NSS Firefox的底层安全服务支持pkcs7,但它只是不暴露于Javascript,对吗?有没有办法通过XPCom做到这一点?从我读到的内容来看,您似乎可以访问我需要的PKCS11功能,但我需要的东西不可用

我还发现JSC-types是受支持的,所以我可以直接使用nss库或者openssl来处理签名

这两个选项中的任何一个看起来都不错,但是我在界面上输了。我很难找到任何关于访问证书库或复制signText窗口的文档


感谢所有未来的搜索者,这里是我目前看似可行的解决方案

首先,显然crypto.signText不起作用,它是分离的,因此存在一个问题,除此之外,它不擅长对二进制数据进行签名,这也是我的一个要求

下一个想法是使用firefox提供的扩展XPCOM api。那里有很多很好的加密软件可供使用。不幸的是,我在源代码或文档中找不到任何证据表明使用XPCOM接口签名会为我提供不透明的签名

因此,我们似乎必须将传递的javascript扩展为java。起初我打算尝试JSS,但是很明显JSS实际上是不需要的,内置的加密功能就足够了

因此,我编写了一个基于java.security和sun.security的applet。有一小部分javascript将用户配置文件目录传递到applet中,这样我就可以在用户配置文件中找到证书数据库,然后获取私钥。获取数据并签署pkcs7 attachedopaque消息


这里有一些很棒的文档。

这并不是您想要做的,但是您可能想要签出名为Forge的开源JavaScript项目。它提供用于签名/验证文本等的JavaScript。它目前正用于演示一种称为WebID的技术。WebID需要SSL证书——它使用flash本地存储或新的HTML5 WebStorage伪造存储以及相关的私钥。然后在执行客户端TLS时使用证书

演示中有一个选项可以从浏览器的密钥链导入证书,但是目前它涉及一个手动过程,即从浏览器导出为PKCS12并导入为PEM。这可能在未来得到改善

在任何情况下,以下是指向WebID演示和源的URL:

演示使用自签名证书,因此您可能会看到一条关于此的警告。如果您想进一步了解Forge和WebID之间的关系: