2016-07-19 7 views
4

У нас есть база данных SQL Server 2016, в которой используется всегда зашифрованная. Наш недавно опубликовал ASP.net веб-сайт пытается вытащить данные из этой базы данных, и, когда это мы получаем эту ошибку:Где размещается всегда зашифрованный сертификат на веб-сервере IIS 7.5?

Error: Failed to decrypt column 'EnSSd'. Failed to decrypt a column encryption key using key store provider: 'MSSQL_CERTIFICATE_STORE'. The last 10 bytes of the encrypted column encryption key are: 'B8-48-B3-62-90-0B-1D-A6-7D-80'. Certificate with thumbprint '97B0D3A64CADBE86FE23559AEE2783317655FD0F' not found in certificate store 'My' in certificate location 'CurrentUser'. Verify the certificate path in the column master key definition in the database is correct, and the certificate has been imported correctly into the certificate location/store. Parameter name: masterKeyPath

Теперь мы знаем, что это означает, что сертификат не был помещен в надлежащее местоположение на сервере. Во время разработки мы просто разместили сертификат в оснастке «Сертификаты» в «Личном магазине сертификатов», и это сработало, однако теперь, когда сайт был опубликован, мы попытались сделать то же самое на веб-сервере, но он не работает (мы как бы это поняли не будет).

Анонимная аутентификация включена на сайте, а анонимный идентификатор пользователя - IUSR. Игнорирование ASP.NET отключено.

Где подходящее место для сдачи сертификата?


UPDATE - мы получили его для работы, изменив учетную запись идентификатора пула приложений на тот, который создал сертификат. Это также учетная запись, используемая при добавлении сертификата в список «Текущий пользовательский личный» на веб-сервере. Мы бы предпочли не использовать эту учетную запись, так что еще раз, где место для размещения сертификата?

+0

Эй @RoastBeast, вы решить эту проблему, в конце концов, я изо всех сил, чтобы получить эту работу самостоятельно. Я на IIS10, хотя ... – AranDG

ответ

0

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

Что я обычно делаю, это сгенерировать сертификат и экспортировать сертификат с помощью закрытого ключа и защищенной парольной фразы. Затем импортируйте сертификат с ключом в личный хранилище учетной записи, используемой для запуска пула приложений. Это не может быть общей интегрированной учетной записью и должна быть указанной вами учетной записью службы.

запустить Powershell скрипт как пользователь:

whoami 
COMPUTER\myIISPoolUser 
Set-Location -Path cert:\localMachine\my 
Import-PfxCertificate –FilePath c:\AlwaysEncrypt.pfx 

или ММС, используйте.

whoami 
COMPUTER\myIISPoolUser 
certmgr.msc 

Вы должны также позволить пользователю APP Pool load user profile

+0

Не могли бы вы добавить еще несколько подробностей к вашему ответу? Я смог экспортировать свой сертификат в виде файла PFX, но после этого я потерялся. – Kevin

+0

Как я могу получить сертификат в магазине App Pool? – Kevin

+0

Когда я запускаю certmgr, он работает под моей учетной записью. Как получить certmgr для запуска в учетной записи App Pool? – Kevin

0

IIS не может распознать сертификат от локального пользователя, при создании сертификата на сервере SQL, по умолчанию это положить в в местный магазин пользователя, сделать следующие вещи, и убедитесь, что сертификат, созданный в соответствии с локальной машины -> текущий пользователь магазина сертификат

  1. Сформировать зашифрованные столбцы с сертификатами по умолчанию
  2. Undo все зашифрованные столбцы в обычный текст
  3. Перейти к сертификату и ключу из безопасности таблицы «Ваша БД -> Таблицы -> Безопасность -> Всегда зашифрованные ключи» и щелкните правой кнопкой мыши ключ шифрования столбца «CEK_Auto 1» -> Script, как -> Создать в новом окне, сохранить этот сгенерированный скрипт
  4. Удалить CEK_Auto 1
  5. Сделайте шаг 3 для сертификата «CMK_Auto 1» и удалите это также
  6. в сценарии «CMK_Auto 1» изменить путь сертификата «CurrentUser» в «LocalMachine»
  7. вы, например, путь будет таким: «N'LocalMachine/my/G4452V8ERH035D2557N235B29MWR0SV834263G26»
  8. выполнить CMK_Auto 1 и CEK_Auto 1 сценарий
  9. убедитесь, что сертификат, сгенерированный локального компьютера персональный каталог
  10. он будет работать, если не проверить с курьерским IIS, что означает по-прежнему ваш сертификат проводится в локального пользователя персонального каталога
  11. отдыха все равно убедитесь, что в строке соединения добавлена ​​опция «Шифрование столбца = Включено».

Благодаря

Джон Раджеш J