asp.net - 远程站点和客户端私钥

标签 asp.net firefox applet smartcard

我遇到了一些困难,因为我需要一种方法让连接到 ASP.NET MVC 站点的客户端使用其私钥对 blob 进行签名和解密,这样服务器就永远看不到私钥 Material 。在解密的情况下,这些是加密的 session key 。服务器看到 session key ,而不是用户私钥,这是可以接受的。

也就是说,我需要在浏览器中向用户展示一些内容,让一些 javascript(或 java applets,或 silverlight 等)执行与客户端上的硬件 token 通信的客户端,并将结果返回给服务器。

这不是客户端身份验证。我不需要简单地使用证书通过 IIS 进行身份验证。硬件 token 是 HID OmniKey USB 读卡器。

我对可用选项的理解是:

<强>1。 Mozilla Javascript Crypto - 这似乎是最佳路线。 Firefox 似乎向远程站点公开了各种智能卡事件和功能。我看到了如何签署文本,但没有关于解密 blob(最大目标)的内容。似乎有加载 PKCS#11 模块的方法,但文档似乎在那之后停止了。

<强>2。 Silverlight with Elevated Trust - 这是我的第二条首选路线,因为我熟悉 Silverlight 和 .NET。 Silverlight 5 具有 P/Invoke 的能力,所以我总是可以调用 PC/SC 模块,但这需要在浏览器外运行,我做不到。似乎有一些关于在具有更高信任度的浏览器中运行 Silverlight 应用程序的帖子,但这是一个全局设置,因此我不想降低其他应用程序的安全性。

<强>3。 ActiveX - ActiveX 组件可以与 PC/SC 模块交互,但这将是一个仅限 Internet Explorer 的解决方案。如果被迫选择所需的浏览器,我更喜欢 Firefox 或 Chrome。

<强>3。 Firefox/Chrome 扩展 - 我的理解是 Firefox XPCOM 是 C++,我可以直接调用 PC/SC 库,扩展可以与远程站点上的脚本/DOM 交互。我不确定远程站点如何触发 Firefox 扩展。换句话说,远程站点如何告诉扩展程序“好的,该签名了”?这条路线的一个例子是 XSign (尽管它不使用硬件 token )。

<强>4。 Java Applet - 这可能最终是唯一的方法。我找到了几个示例/指南,但我不熟悉 Java。 Java Applet for Signing with a Smart Card .在这种情况下,它只是一个可以与 token 通信并将结果发布到站点的简单小程序。

还有其他选择吗?我相信选项 (1),Mozilla Javascript Crypto 是最好的方法,但文档非常稀疏。感谢您的指导。

最佳答案

我几乎检查了所有选项。最后一个选项(Java Applet)最适合您的情况并且最容易实现。缺点是 JRE(Java 运行时环境)应该已经安装在客户端并且可以很好地与浏览器配合使用。用户还必须授予小程序在首次运行时连接到他的智能卡的权限。

顺便说一句,如果你想使用 PKCS#7,你可以使用 Bouncy CaSTLe。它在 JDK 中没有标准的 API。

PS:不要使用 JavaScript 进行加密。 Javascript Cryptography Considered Harmful .

关于asp.net - 远程站点和客户端私钥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8539223/

相关文章:

.net - 如何在 ASP.NET 中的表单之外有一个表单 PLUS 按钮控件?

c# - 具有复杂 ItemType 失败的 ASP.NET 强类型数据控件(中继器)

asp.net - 基于角色/权限的表单授权/身份验证?

c# - 从复选框列表中的顶部项目中从 SQL 数据库中选择的数据被复制到所有 Gridview 行

firefox - Selenium 网络驱动程序 : Delete Cookies On All Domains

iframe 内的 Javascript URL 在 Firefox 中不执行

java - 如何存储文本字段中的信息?

c# - 使用 C# 给定 hwnd 在 Chrome、Firefox 和 IE 中获取当前 URL

macos - java 小程序在 JRE 1.6.0_29 及更高版本中未获取焦点 (OS X)

Java 小程序不显示任何内容