use*_*353 8 security web-applications pki digital-signature pkcs#7
我有一个Web应用程序,其中一些数据(不是文件)需要使用PKI私钥进行数字签名.PKI证书和私钥将位于USB Cryptotoken中,当插入USB插槽时,它会将证书注册到浏览器.这减轻了使用证书进行身份验证的痛苦,因为我通过在我的应用程序中进行ssl-renegotiation.
但是,使用证书进行数字签名似乎有点棘手.我可以想到几种方法来做到这一点
CAPICOM - http://en.wikipedia.org/wiki/CAPICOM 这适用于支持CAPICOM的浏览器(例如IE).但是,似乎微软已经停止了这一点.
Mozilla Crypto对象 - https://developer.mozilla.org/en-US/docs/JavaScript_crypto
WebCrypto API - 大多数浏览器尚不支持此功能.
自定义Java Applet或一些可自由开源的JavaApplet控件.
还有其他选择吗?
我试图找出在Web应用程序中执行此操作的常见,方便和安全的方法.
注意:
[披露:我为 CoSign 工作。]
您遇到的问题是旧式 PKI 系统中常见的问题,该系统将签名者的私钥存储在边界处(例如,在智能卡、令牌等中)。该系统是在 PC(及其上运行的应用程序)成为焦点时设计的。但本世纪情况并非如此。现在浏览器或移动设备都是焦点。
Web 应用程序的性质(它们要么在主机上运行,要么是浏览器上的沙箱 JavaScript)与“保护”私钥的本地硬件的概念之间存在着紧张关系。
突破浏览器的沙箱
一种设计方向是尝试突破浏览器的沙箱来访问本地硬件私钥存储。您列出了许多选项。另外一个是Chrome USB 访问库。但所有这些解决方案都是:
关于您的问题 5“还有其他选择吗?”
是:集中签名
更好的选择(恕我直言)是集中签名。这样,密钥就保存在集中式 FIPS 安全服务器中。同时,签名者只需使用网络应用程序来授权签名。签名者不需要持有私钥,因为它存储在安全服务器中。
要对签名者进行身份验证,您可以使用应用程序所需的任何安全级别:用户名/密码;一次性密码;通过短信进行两因素身份验证;ETC。
CoSign Signature API和CoSign Signature Web Agent就是为此而设计的。其他供应商也提供集中式 PKI 签名。
添加以回复评论
从你的答案的第二部分开始 - 如果证书存储在服务器中并通过使用 uname/pwd 或 2FA 对用户进行身份验证来检索,那么为什么要进行数字签名呢?即,与仅使用 uname/pwd 或 2FA 验证交易相比,它有什么优势?
答:在中心化设计中,私钥不会离开中央服务器。相反,将要签名的文档或数据发送到服务器并进行签名,然后将签名的文档或数据(例如 XML)返回到 Web 应用程序。
回复:为什么要这样做?因为可以验证经过数字签名的文档或数据集(例如 XML),以保证文档自签名后没有被更改,并提供信任链来保证签名者的身份。相比之下,密码即使经过 2FA 等强化,也只能为应用程序提供签名者身份保证,而不是第三方。
PKI 数字签名使第三方能够通过验证过程确保签名者的身份。并且可以根据需要通过选择不同的 CA 来设置保证的强度。
| 归档时间: |
|
| 查看次数: |
3795 次 |
| 最近记录: |