【发布时间】:2013-02-14 18:41:09
【问题描述】:
我需要让我的应用程序的用户使用他们的个人 USB 安全令牌签署他们的批准。
我已经成功地签署了数据,但我无法获得有关谁的令牌被用于这样做的信息。
这是我目前的代码:
CspParameters csp = new CspParameters(1, "SafeNet RSA CSP");
csp.Flags = CspProviderFlags.UseDefaultKeyContainer;
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(csp);
// Create some data to sign.
byte[] data = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7 };
Console.WriteLine("Data : " + BitConverter.ToString(data));
// Sign the data using the Smart Card CryptoGraphic Provider.
byte[] sig = rsa.SignData(data, "SHA1");
Console.WriteLine("Signature : " + BitConverter.ToString(sig));
令牌信息中有一个字段,称为“令牌名称”。如何访问该字段以验证已使用哪个令牌签署批准?
其他信息和更新:
- “令牌名称”总是匹配所有者的名称(拥有 USB 的用户 令牌)
- 好像不行,可能有网络服务或者 我需要打电话才能直接获取信息 来自证书颁发机构。
【问题讨论】:
-
也许这更像是 security.stachexchange.com 的一个问题?
-
看起来您需要提取Modulus 作为证书指纹,然后与所有可用证书指纹的数据库进行比较。可能类似于
byte[] modulus = rsa.ExportParameters(false).Modulus; -
@oleksii 我没有模数数据库。我需要获取“令牌名称”并将其与当前的 AD 用户名进行比较。感谢您的评论。
-
我不太确定什么是令牌,它是私有 RSA 证书吗?我认为您根本无法将此类信息嵌入证书中。你需要一个你可以信任的第三方,即你的数据库,第三方要么承认这个指纹是用于 Bob 的私人证书的,要么它会拒绝它。例如,如果您将用户名嵌入到私有证书中,那么任何人都可以创建一个新的私有证书并声称自己是 Bob。你怎么能相信呢?
-
令牌名称是硬件独有的还是标准的一部分?它的存储方式很可能是您无法通过标准库获取的。