.net 如何在登录iTextSharp时自动输入密码
我必须使用存储在安全令牌中的证书。我可以从windows证书存储访问它,但该设备有密码,因此会显示一个带有输入字段的弹出窗口,我使用了CspParameters自动输入密码 但是,当我在弹出的数千个文件上签名时,会再次显示输入密码。 这是我用于加载证书的代码:.net 如何在登录iTextSharp时自动输入密码,.net,itext,digital-signature,smartcard,x509certificate2,.net,Itext,Digital Signature,Smartcard,X509certificate2,我必须使用存储在安全令牌中的证书。我可以从windows证书存储访问它,但该设备有密码,因此会显示一个带有输入字段的弹出窗口,我使用了CspParameters自动输入密码 但是,当我在弹出的数千个文件上签名时,会再次显示输入密码。 这是我用于加载证书的代码: public X509Certificate2 loadX509byPass() { var store = new X509Store(StoreName.My, StoreLocation.Cu
public X509Certificate2 loadX509byPass()
{
var store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
store.Open(OpenFlags.MaxAllowed);
var certificates = store.Certificates.Find(X509FindType.FindBySerialNumber, SerialNumber, false);
var cert = certificates[0];
store.Close();
var pass = new SecureString();
char[] array = Password.ToCharArray();
foreach (char ch in array)
{
pass.AppendChar(ch);
}
var privateKey = cert.PrivateKey as RSACryptoServiceProvider;
CspParameters cspParameters = new CspParameters(privateKey.CspKeyContainerInfo.ProviderType,
privateKey.CspKeyContainerInfo.ProviderName,
privateKey.CspKeyContainerInfo.KeyContainerName,
new System.Security.AccessControl.CryptoKeySecurity(),
pass);
var rsaCsp = new RSACryptoServiceProvider(cspParameters);
// set modified RSA crypto provider back
cert.PrivateKey = rsaCsp;
return cert;
}
签署文件时:
Cert = SingletonCA.Instance.loadX509byPass();
....
BcX509.X509Certificate bcCert = DotNetUtils.FromX509Certificate(Cert);
var chain = new List<BcX509.X509Certificate> { bcCert };
var FontColour = new BaseColor(0, 0, 255);
IExternalSignature pks = new X509Certificate2Signature(Cert, "SHA1");
MakeSignature.SignDetached(appearance, pks, chain, null, null, null, 0, CryptoStandard.CMS);
Cert=SingletonCA.Instance.loadX509byPass();
....
BcX509.x509证书bcCert=DotNetUtils.fromx509证书(Cert);
var chain=新列表{bcCert};
var FONTCOLOR=新的基色(0,0,255);
IExternalSignature pks=新X509Certificate2Signature(证书,“SHA1”);
MakeSignature.signDistached(外观、pks、链、null、null、null、0、CryptoStandard.CMS);
是否可以在不显示此消息的代码中发送密码
谢谢您的帮助。您是只调用一次
loadX509byPass()
还是一次又一次地调用每个签名?是的,兄弟。我想USB令牌被拒绝了是的,只有一次一次的文件。每个文件一次?为什么不简单一次呢?我不理解这个用例。如果不是某种形式的批准(当然需要手动输入),签名应该表明什么?缓存PIN的想法违反了任何安全性概念。如果说它更像是一种完整性保护,那么数字签名就不是一个很有说服力的选择。如果你坚持这样做,有些卡不需要PIN码就可以使用钥匙。