Nota que utilizo SHA512 pero SHA256 a trabajar con los siguientes ejemplos:
"algoritmo no válido" Me tomó una eternidad descubrirlo e intenté prácticamente todo. Apoyos a Gonzalo Gallotti por publicar el enlace al código que me ayudó. Comenté mi código para mostrar lo que está haciendo cada paso. NOTA: este código no funcionará correctamente sin un certificado generado que se publica a continuación el ejemplo de código:
public void GetCertificate() {
// Get the Machine Cert Store
var store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
string alg = CryptoConfig.MapNameToOID("SHA512");
// Open the cert store
store.Open(OpenFlags.ReadWrite);
// Loop through each certificate within the store
foreach (X509Certificate2 myCert in store.Certificates)
{
// Get the certificate we are looking for
if (myCert.IssuerName.Name.Contains("CN=YourSite"))
{
// Check if the certificate has a private key
if (myCert.HasPrivateKey)
{
// Get your custom signature as a string
string mySignature = GetSignatureString();
// Convert signature to byte array
byte[] originalData = Encoding.UTF8.GetBytes(mySignature);
// Create RSA provider from private key
RSACryptoServiceProvider rsaProvider = (RSACryptoServiceProvider)myCert.PrivateKey;
// Sign the signature with SHA512
byte[] signedSignature = signedSignature = rsaProvider.SignData(originalData, alg);
if (rsaProvider.VerifyData(originalData, alg, signedSignature))
{
// Signature is verified Do Stuff
}
else
{
throw new Exception("The data does not match the signature.");
}
}
}
}
}
Siguiente - el certificado tiene que ser SHA512 y utilizar un (Proveedor de servicios de cifrado) CSP que es capaz SHA512. Aquí hay una lista de CSP y sus capacidades. Si busca SHA512, encontrará el "Microsoft Enhanced RSA and AES Cryptographic Provider". Por defecto, la generación de certificados no utiliza esto (al menos en Windows) por lo que debe especificarlo cuando crea el certificado.
Crear clave privada y el certificado - este paso le hará preguntas, estado, región, etc, etc
openssl req -x509 -nodes -sha512 -newkey rsa:2048 -keyout 512key.pem -out 512cert.pem -days 3650
Crear archivo PFX a importar en su almacén de certificados mediante el proveedor RSA y AES de cifrado mejorado de Microsoft:
openssl pkcs12 –export –in 512cert.pem –inkey 512key.pem –CSP “Microsoft Enhanced RSA and AES Cryptographic Provider” –out 512pfx.pfx
¿Cuál es el valor de 'id'? – dtb
Actualicé la pregunta con el valor de id. – scott