Uso JavaScript para abrir la tienda CAPICOM para elegir el certificado. Después de eso, exporto el certificado seleccionado, la clave pública y la clave privada de ese certificado y los coloco en tres campos ocultos.
var privateKey = certificates.Item(1).PrivateKey;
var cert = certificates.Item(1);
var publicKey = cert.PublicKey().EncodedKey.Value
Al firmar xml usé:
Para tomar el certificado:
Dim hideCertCapicom As String = Replace(HiddenCert.Value, " ", "+")
Dim certificate As New X509Certificate2(Convert.FromBase64String(hideCertCapicom))
Para definir la clave privada que utilicé:
Dim keyC As String = hideKey
Dim cspp As New CspParameters()
cspp.KeyContainerName = keyC
Dim tmpRsa As New RSACryptoServiceProvider(cspp)
tmpRsa.PersistKeyInCsp = True
Esto firmará correctamente mi xml.
Para verificar el xml que utilicé:
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
Pero esto no funciona. Solo funciona si uso la clave privada nuevamente.
¿Es una buena práctica firmar y verificar con la misma clave privada o hacer ambas cosas con una clave pública?