Ich signiere das XML-Dokument digital. Hier ist mein Code:Wie kann überprüft werden, ob das DSC (USB-Token) beim Signieren des Dokuments angeschlossen ist?
private void mbSign_Click_1(object sender, EventArgs e)
{
try
{
CadesSignature cs = new CadesSignature(FStrDSCSNo);
cs.DigitalSignatureCertificate = DigitalCertificate.LoadCertificate(false, string.Empty, "Select Certificate", "Select the certificate for digital signature");
RSACryptoServiceProvider rsaEncryptor = (RSACryptoServiceProvider)cs.DigitalSignatureCertificate.PrivateKey;
L_ADSC_ValidTo = cs.DigitalSignatureCertificate.NotAfter.ToShortDateString();
if (DateTime.Now <= DateTime.ParseExact(L_ADSC_ValidTo, "dd/MM/yyyy", null))
{
FObjLog.WriteToLog("Valid DSC");
L_ADSC_CertStatus = "A";
// Sign the XML document.
//DataTable dt_SignXMlAndSignaute = new DataTable();
SignXml(rsaEncryptor);
}
}
catch (CryptographicException)
{
MessageBox.Show("Invalid DSC Selection.Please Choose Correct DSC");
FObjLog.WriteToLog("Invalid DSC Selection.Please Choose Correct DSC");
}
catch (NullReferenceException)
{
MessageBox.Show("Please Attach DSC");
FObjLog.WriteToLog("Please Attach DSC");
}
}
public void SignXml(RSA Key)
{
XmlDocument LXMLDoc = new XmlDocument();
if (File.Exists(LXMLPath))
{
LXMLDoc.Load(LXMLPath);
}
if (LXMLDoc == null)
throw new ArgumentException("LXMLDoc");
if (Key == null)
throw new ArgumentException("Key");
// Create a SignedXml object.
SignedXml signedXml = new SignedXml(LXMLDoc);
// Add the key to the SignedXml document.
signedXml.SigningKey = Key;
// Create a reference to be signed.
Reference reference = new Reference();
//reference.Uri = txtfilepath.Text;
reference.Uri = "";
// Add an enveloped transformation to the reference.
XmlDsigEnvelopedSignatureTransform env = new XmlDsigEnvelopedSignatureTransform();
reference.AddTransform(env); // calculating Digest value
// Add the reference to the SignedXml object.
signedXml.AddReference(reference);
// Add an RSAKeyValue KeyInfo (optional; helps recipient find key to validate).
KeyInfo keyInfo = new KeyInfo();
keyInfo.AddClause(new RSAKeyValue((RSA)Key));
signedXml.KeyInfo = keyInfo;
signedXml.ComputeSignature();
string FullSignatureValue = "";
string SignatureValue = "";
XmlElement xmlDigitalSignature = signedXml.GetXml();
FullSignatureValue = xmlDigitalSignature.InnerText;
string[] Sign = FullSignatureValue.Split(new char[] { '=' }, 2);
SignatureValue = Sign[1].ToString();
signedXml = new SignedXml(LXMLDoc);
LXMLDoc.DocumentElement.AppendChild(LXMLDoc.ImportNode(xmlDigitalSignature, true));
}
Hier i das Dokument zu unterzeichnen bin in der Lage, aber ich bin nicht in der Lage zu überprüfen, ob die USB-Token während der Anmeldung verbunden ist. Hier passiert, selbst wenn das USB-Token nicht angeschlossen ist, erscheint das Zertifikat zur Auswahl, da das Zertifikat lokal verfügbar ist. Wenn Sie alle Zertifikate aus dem Internet Explorer entfernen und versuchen, mit einem nicht angeschlossenen USB-Token zu signieren, müssen Sie eine DSC-Karte (USB-Token) anhängen. Ich möchte das Dokument nur signieren, wenn das DSC (USB-Token) angeschlossen ist. Wie stelle ich sicher, dass der USB-Stick beim Signieren angeschlossen ist?