Обратите внимание, что я использую SHA512, но SHA256 будет работать с приведенными ниже примерами:
"Указан неверный алгоритм" У меня ушло на то, чтобы понять, и я попробовал практически все.Рекомендую Гонсало Галлотти за размещение ссылки на фрагмент кода, который мне помог.Я прокомментировал свой код, чтобы показать, что делает каждый шаг.ПРИМЕЧАНИЕ: этот код не будет работать без правильно сгенерированного сертификата, который размещен под образцом кода:
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.");
}
}
}
}
}
Далее - сертификат должен быть SHA512 и использовать CSP (поставщик услуг криптографии), который является SHA512Способный.Вот список CSP и их возможностей.Если вы ищете SHA512, вы найдете «Microsoft Enhanced RSA и AES Cryptographic Provider».По умолчанию генерирующие сертификаты не используют это (по крайней мере, в Windows), поэтому вы должны указать его при создании сертификата.
Создать закрытый ключ и сертификат - этот шаг будет задавать вам вопросы, состояние, регион и т. Д.и т. д.
openssl req -x509 -nodes -sha512 -newkey rsa:2048 -keyout 512key.pem -out 512cert.pem -days 3650
Создайте файл PFX для импорта в хранилище сертификатов, используя Microsoft Enhanced RSA и AES Cryptographic Provider:
openssl pkcs12 –export –in 512cert.pem –inkey 512key.pem –CSP “Microsoft Enhanced RSA and AES Cryptographic Provider” –out 512pfx.pfx