Uso JavaScript per aprire l'archivio CAPICOM per scegliere il certificato. Successivamente esporto il certificato selezionato, la chiave pubblica e la chiave privata del certificato e le metto in tre campi nascosti.
var privateKey = certificates.Item(1).PrivateKey;
var cert = certificates.Item(1);
var publicKey = cert.PublicKey().EncodedKey.Value
Durante la firma di xml ho usato:
Per ricevere il certificato:
Dim hideCertCapicom As String = Replace(HiddenCert.Value, " ", "+")
Dim certificate As New X509Certificate2(Convert.FromBase64String(hideCertCapicom))
Per definire la chiave privata ho usato:
Dim keyC As String = hideKey
Dim cspp As New CspParameters()
cspp.KeyContainerName = keyC
Dim tmpRsa As New RSACryptoServiceProvider(cspp)
tmpRsa.PersistKeyInCsp = True
Questo firmerà correttamente il mio xml.
Per verificare xml ho usato:
Dim hidePublicKey As String = HiddenPublicKey.Value
Dim keyC As String = hidePublicKey
Dim cspp As New CspParameters()
cspp.KeyContainerName = keyC
Dim tmpRsa As New RSACryptoServiceProvider(cspp)
tmpRsa.PersistKeyInCsp = True
Ma questo non funziona. Funziona solo se uso di nuovo la chiave privata.
È buona pratica firmare e verificare con la stessa chiave privata o fare entrambe le cose con la chiave pubblica?