Защита данных с использованием Entity Framework Core - PullRequest
1 голос
/ 11 июня 2019

Итак, я следовал официальному руководству Microsoft (https://docs.microsoft.com/el-gr/aspnet/core/security/data-protection/implementation/key-storage-providers?view=aspnetcore-2.2&tabs=visual-studio) для шифрования данных и их хранения в базе данных с использованием Entity Framework Core, но я не могу заставить его работать на нескольких машинах. Поэтому я использовал реализацию Entity Framework Core, потому что в руководстве говорится: «С этим пакетом ключи могут совместно использоваться несколькими экземплярами веб-приложения». Приложение прекрасно работает при использовании его из развернутой версии, например, xyz.com, но оно не позволяет мне вмешиваться с localhost Будет ли проблема после этого, когда у моей виртуальной машины будет максимум, и я хочу добавить еще одну? Если да, то как я могу заставить ее работать как на развернутом сайте, так и на разных машинах? Нет учебника, который реализует это, я искал везде. Большое спасибо.

services.AddDataProtection()
                .UseCryptographicAlgorithms(
                    new AuthenticatedEncryptorConfiguration()
                    {
                        EncryptionAlgorithm = EncryptionAlgorithm.AES_256_CBC,
                        ValidationAlgorithm = ValidationAlgorithm.HMACSHA256,

                    }
                ).PersistKeysToDbContext<DataContext>();

Обновление 12-6-2019

Итак, я следовал документации Microsoft (https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/implementation/key-encryption-at-rest?view=aspnetcore-2.2) и в нем говорится:

«Если приложение распространяется на несколько компьютеров, может быть удобно распределить общий сертификат X.509 по машинам и настроить размещенные приложения для использования сертификата для шифрования ключей в состоянии покоя»

Я сгенерировал сертификат x.509, используя это руководство:

(https://www.youtube.com/watch?v=1xtBkukWiek)

Мой обновленный код:

        services.AddDataProtection()
                .UseCryptographicAlgorithms(
                    new AuthenticatedEncryptorConfiguration()
                    {
                        EncryptionAlgorithm = EncryptionAlgorithm.AES_256_CBC,
                        ValidationAlgorithm = ValidationAlgorithm.HMACSHA256,

                    }
                )
                // )
                .ProtectKeysWithCertificate(new X509Certificate2("wibit-test-cert.pfx", "password"))
                .PersistKeysToDbContext<DataContext>();

При тестировании на моей локальной машине все работает нормально, но при развертывании я получаю эту ошибку:

ошибка: «Системе не удается найти указанный файл»

Я пробовал несколько способов исправить это, включая _hostingEnvironment.ContentRootPath или WebRootPath. Оба эти способа и тот, который я использую в обновленном коде, работают на моем компьютере, но не в развернутом приложении.

Есть какие-нибудь подсказки?

1 Ответ

0 голосов
/ 14 июня 2019

Я наконец исправил это! Проблема заключалась в том, что я не установил имя приложения:

.SetApplicationName("myapp")

И я изменил путь к сертификату следующим образом:

.ProtectKeysWithCertificate(new X509Certificate2(Path.Combine(_hostingEnvironment.ContentRootPath,"wibit-test-cert.pfx"), "password"))

Также это может быть проблема с правами доступа, потому что, когда я размещал приложение в A2Hosting, оно не могло найти указанный файл (wibit-test-cert.pfx), но когда я развернул его в GCP Cloud, это сработало!

Теперь я могу шифровать и дешифровать данные, используя одну и ту же базу данных с разными приложениями.

Итак, мой окончательный код:

services.AddDataProtection()
  .UseCryptographicAlgorithms(
      new AuthenticatedEncryptorConfiguration()
         {
             EncryptionAlgorithm = EncryptionAlgorithm.AES_256_CBC,
             ValidationAlgorithm = ValidationAlgorithm.HMACSHA256,

          }
       )
       .SetApplicationName("myapp")
       .ProtectKeysWithCertificate(new X509Certificate2(Path.Combine(_hostingEnvironment.ContentRootPath,"wibit-test-cert.pfx"), "password"))
       .PersistKeysToDbContext<DataContext>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...