Antes que nada, debo aclarar que la firma de una cadena se efectúa por medio de la clave privada, por lo que deben verificar que la clave privada se encuentren dentro del almacén para posteriormente hacer la firma de la cadena.
Veamos el código y expliquemoslo
//Establecemos el numero de certificado, que se empleara para la firma, dicho certificado deberá estar dentro del almacen de certificados de Windows y deberá tener su clave privada
string noSerie = "3030323031303030303030313030303030383133";
//Establecemos la cadena que se firmara
string CadenaAFirmar = "holaMundo";
//Buscamos el certificado que se empleara para la firma dentro del almacén de certificados
X509Store almacen = null;
almacen = new X509Store(StoreLocation.LocalMachine);
almacen.Open(OpenFlags.OpenExistingOnly);
X509Certificate2Collection Certificados = almacen.Certificates.Find(X509FindType.FindBySerialNumber, noSerie, false);
X509Certificate2 CertificadoFirma = Certificados[0];
almacen.Close();
//Se carga la clave privada
RSACryptoServiceProvider csp = null;
csp = (RSACryptoServiceProvider)CertificadoFirma.PrivateKey;
var enhCsp = new RSACryptoServiceProvider().CspKeyContainerInfo;
var cspparametro = new CspParameters(enhCsp.ProviderType, enhCsp.ProviderName, csp.CspKeyContainerInfo.KeyContainerName);
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cspparametro))
{
//Se firma la cadena
rsa.PersistKeyInCsp = true;
byte[] bytefirma = rsa.SignData(Encoding.UTF8.GetBytes(CadenaAFirmar), "SHA256");
return bytefirma;
}
Felices lineas
Veamos el código y expliquemoslo
//Establecemos el numero de certificado, que se empleara para la firma, dicho certificado deberá estar dentro del almacen de certificados de Windows y deberá tener su clave privada
string noSerie = "3030323031303030303030313030303030383133";
//Establecemos la cadena que se firmara
string CadenaAFirmar = "holaMundo";
//Buscamos el certificado que se empleara para la firma dentro del almacén de certificados
X509Store almacen = null;
almacen = new X509Store(StoreLocation.LocalMachine);
almacen.Open(OpenFlags.OpenExistingOnly);
X509Certificate2Collection Certificados = almacen.Certificates.Find(X509FindType.FindBySerialNumber, noSerie, false);
X509Certificate2 CertificadoFirma = Certificados[0];
almacen.Close();
//Se carga la clave privada
RSACryptoServiceProvider csp = null;
csp = (RSACryptoServiceProvider)CertificadoFirma.PrivateKey;
var enhCsp = new RSACryptoServiceProvider().CspKeyContainerInfo;
var cspparametro = new CspParameters(enhCsp.ProviderType, enhCsp.ProviderName, csp.CspKeyContainerInfo.KeyContainerName);
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cspparametro))
{
//Se firma la cadena
rsa.PersistKeyInCsp = true;
byte[] bytefirma = rsa.SignData(Encoding.UTF8.GetBytes(CadenaAFirmar), "SHA256");
return bytefirma;
}
Felices lineas
Muy buenos días, como podría realizar la siguiente conversión a c#?
ResponderBorraropenssl dgst -sha256 -sign privateKey.key -out file.txt.signature file.txt