Лучшая практика siging с сертификатом rsa

#c# #rsa #x509certificate #sign

#c# #rsa #x509certificate #подписать

Вопрос:

У меня есть веб-сервис, которому требуется подпись тела на всех запросах. итак, мне интересно, какова наилучшая практика для этого? Я использую этот метод для подписи строки, но, думаю, это не лучший способ. потому что мой закрытый ключ никогда не располагает:

 using (var provider = new RSACryptoServiceProvider())
{
    provider.ImportParameters(ProjectValues.PrivateKey.ExportParameters(true));
    encryptByteList = provider.SignData(content, CryptoConfig.MapNameToOID("SHA256"));
}
  

Я уже прочитал сертификат и закрытый ключ один раз, когда проект загружался в первый раз. Вот так:

 Certificate = new X509Certificate2("my pfx path", "***", X509KeyStorageFlags.Exportable);
PrivateKey = (RSACryptoServiceProvider)Certificate.PrivateKey;
  

Затем я нашел этот метод:

 var cert = new X509Certificate2("my pfx path", "***", X509KeyStorageFlags.Exportable);
using (var rsa = cert.GetRSAPrivateKey())
{
    encryptByteList = rsa.SignData(content, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
}
  

но это работает, если я читаю сертификат из файла при каждом запросе. очевидно, что это неэффективный способ

Комментарии:

1. Вы не можете иметь свой пирог и свой пирог тоже. Вы не хотите получать закрытый ключ при каждом запросе, но вы также не хотите сохранять ключ. Это совершенно противоположные требования, и вы не можете иметь оба одновременно.

2. спасибо, дорогой @jdweng. у меня нет проблем с сохранением закрытого ключа. но это доступно, и, насколько я знаю, я не должен был хранить такие объекты. если мой первый метод безопасен, я сохраняю его. но в глубине души я знаю, что должен быть лучший способ.

3. Наилучшая практика — максимально полагаться на безопасность SSL / TLS и делать что-то нестандартное, только если у вас есть уникальные требования, например, неотказуемость.

4. спасибо, дорогой @PresidentJamesK.Polk. но это не мой выбор. поставщик услуг заставляет нас использовать эти новые методы безопасности.