Сеть. Использование шифрования конфигурации RsaProtectedConfigurationProvider - ошибка “Неправильных данных”

Я пытаюсь зашифровать значения строки подключения в сети. Файл конфигурации для ASP.NET 2,0 веб-приложения, выполняя процедуру описан на MSDN. Используя RsaProtectedConfigurationProvider, я создал и экспортировал машину уровень, включают мою машину разработки (использующий флаг-pri), и импортировал ключ и предоставил доступ на веб-сервере. До тестирования автоматического дешифрования ASP.NET я хотел попытаться вручную дешифровать сеть. Конфигурация.

Я могу вручную зашифровать и дешифровать сеть. Конфигурация на той же машине с помощью-pef и - параметры PDF соответственно, но вручную дешифруя на веб-сервере перестала работать с a Bad Data сообщение об ошибке.

Самая странная вещь состоит в том, что keyContainerName приписывают в моей сети. Файл конфигурации, кажется, проигнорирован. Если я пытаюсь заменить правильное значение мусором (больше не соответствующий никакому ключевому контейнеру, я создал), шифрование и дешифрование все еще работают над моей машиной разработки. Какие-либо идеи?

15
задан LCJ 31 May 2013 в 16:11
поделиться

5 ответов

На самом деле вы можете использовать EL от Microsoft только для шифрования строки соединения. Вы можете скачать ее здесь: http://www.codeplex.com/entlib

hth

0
ответ дан 1 December 2019 в 05:02
поделиться

Из вашего описания вы столкнусь с некоторыми проблемами об обвязке web.config через экспортируемый провайдер RSA, правильный?

Согласно ссылке шифрования RSA, я выполнил некоторые локальные тесты, Нормальный процесс шифрования раздела Web.config через поставщик RSA и Перейти к другой машине, как показано ниже:

====================== Шаг 1

Создание клавиша RSA на уровне машины: ASPNET_REGIIS -PC "MyTestkeys" -Exp

Шаг 2

Грант. Доступ к чтению к ключу шифрования RSA:

ASPNET_REGIIS -PA «MyTestkeys» «NT Authory \ Network»

Шаг 3

Шифрование Файл конфигурации: aspnet_regiis -pef "ConnectionStrings" "Физический путь веб-сайта папка «-Пров MyrsaProvider

экспортировать контейнер и импортировать его обратно на другую машину, используя Следующие шаги

Шаг 4

Экспорт контейнера ключей RSA на уровне машины: aspnet_regiis -px "mytesteys" "C: \ config-key.xml" -PRI

Шаг 5

Копировать Config-key.xml к C: \ на 2-м сервере

Шаг 6

Импортировать Контейнер ключей RSA на уровне машины на 2-м сервере: ASPNET_REGIIS -PI «MyTestways» C: \ Config-key.xml "

Шаг 7

Грант Прочитал доступ к ключу шифрования RSA: aspnet_regiis -pa "MyTestKeys" "NT AUTHORITY \ NETWORK SERVICE"

Шаг 8

Копировать зашифрованы web.config на 2-й сервер

================== ======

на основе упомянутых шагов, я думаю, что большая часть процесса, который вы следовал должен быть правильным. До сих пор я хотел бы предложить вам проверить следующие вещи:

  1. проверьте настройку вашего пользовательского поставщика RSA, чтобы увидеть, правильно ли это Скопировано на целевую машину также и установить на использование контейнера для машин

======== Secrypt Config diption =======

Тип = "system.configuration.rsaprotectedConfigurationProvider, System.configur ation, version = 2.0.0.0, культура = нейтральная, publickeyteken = b03f5f7f11d50a3a "/>

  1. Как и в вышеуказанных шагах после создания контейнера RSA ключа, вам нужно используйте «ASPNET_REGIIS -PA», чтобы убедиться, что определенная учетная запись (которая будет запустить приложение ASP.NET) имеет достаточное разрешение доступа к ключевой контейнер. Как правило, когда вы используете VS 2008 / VS 2005 тестовый сервер для запуска Приложение ASP.NET, вы используете пользователь входа в систему (который, вероятно, admin), однако, если вы запустите ASP.NET в IIS (или после перехода к другому сервер, который использует другой другой разные процессы), вам нужно сделать уверен, что определенная учетная запись процесса была предоставлена ​​разрешение.

Вы можете проверить их, чтобы увидеть, является ли проблема из-за некоторых из них.

искренне, Sanjay Manju Suman

7
ответ дан 1 December 2019 в 05:02
поделиться

rsaprotectedConfigurationProvider использует учетную запись машины или учетную запись пользователя, чтобы зашифровать клавиши и сохранить их в файле, который называется «контейнер ключа», который обычно сохраняется в C: \ Documents и Settings \ всех пользователей \ Данные приложения \ Microsoft \ Crypto \ RSA. И идентификация процесса работника ASP.NET (пользователь ASPNET в XP / 2000 или сетевой службе в случае 2003 года) должен иметь доступ к этим файлам, чтобы он мог расшифровать его, или вы получите это сообщение об ошибке.

Пожалуйста, проверьте эту ссылку для получения дополнительной информации

http://msdn.microsoft.com/en-us/library/dtkwfdky.aspx

0
ответ дан 1 December 2019 в 05:02
поделиться

Существует несколько способов сделать это, как показано ниже.

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

Метод A: Используйте AccountManager (уровень API 5 +)

Вы можете использовать AccountManager.getAccounts или AccountManager.getTaxType , чтобы получить список всех имен учетных записей на устройстве. К счастью, для определенных типов учетных записей (включая com.google ) имена учетных записей являются адресами электронной почты. Пример фрагмента ниже.

Pattern emailPattern = Patterns.EMAIL_ADDRESS; // API level 8+
Account[] accounts = AccountManager.get(context).getAccounts();
for (Account account : accounts) {
    if (emailPattern.matcher(account.name).matches()) {
        String possibleEmail = account.name;
        ...
    }
}

Обратите внимание, что для этого требуется разрешение GET _ ACCOUNTS :

<uses-permission android:name="android.permission.GET_ACCOUNTS" />

Дополнительные сведения об использовании AccountManager можно найти в примере кода менеджера контактов в SDK.

Метод B: Использовать ContactsContract. Профиль (уровень 14 API +)

С Android 4.0 (Ice Cream Sandwich), вы можете получить адреса электронной почты пользователя, получив доступ к их профилю. Доступ к профилю пользователя немного тяжел, так как требует двух разрешений (подробнее об этом ниже), но адреса электронной почты являются довольно чувствительными частями данных, поэтому это цена допуска.

Ниже приведен полный пример использования CursorLoader для извлечения строк данных профиля, содержащих адреса электронной почты.

public class ExampleActivity extends Activity implements LoaderManager.LoaderCallbacks<Cursor> {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getLoaderManager().initLoader(0, null, this);
    }

    @Override
    public Loader<Cursor> onCreateLoader(int id, Bundle arguments) {
        return new CursorLoader(this,
                // Retrieve data rows for the device user's 'profile' contact.
                Uri.withAppendedPath(
                        ContactsContract.Profile.CONTENT_URI,
                        ContactsContract.Contacts.Data.CONTENT_DIRECTORY),
                ProfileQuery.PROJECTION,

                // Select only email addresses.
                ContactsContract.Contacts.Data.MIMETYPE + " = ?",
                new String[]{ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE},

                // Show primary email addresses first. Note that there won't be
                // a primary email address if the user hasn't specified one.
                ContactsContract.Contacts.Data.IS_PRIMARY + " DESC");
    }

    @Override
    public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor cursor) {
        List<String> emails = new ArrayList<String>();
        cursor.moveToFirst();
        while (!cursor.isAfterLast()) {
            emails.add(cursor.getString(ProfileQuery.ADDRESS));
            // Potentially filter on ProfileQuery.IS_PRIMARY
            cursor.moveToNext();
        }

        ...
    }

    @Override
    public void onLoaderReset(Loader<Cursor> cursorLoader) {
    }

    private interface ProfileQuery {
        String[] PROJECTION = {
                ContactsContract.CommonDataKinds.Email.ADDRESS,
                ContactsContract.CommonDataKinds.Email.IS_PRIMARY,
        };

        int ADDRESS = 0;
        int IS_PRIMARY = 1;
    }
}

Для этого требуются разрешения READ _ PROFILE и READ _ CONTACTS :

<uses-permission android:name="android.permission.READ_PROFILE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
-121--1809164-

Откройте приложение/config/config.php и задайте следующие значения:

$config['uri_protocol'] = "PATH_INFO";

$config['enable_query_strings'] = TRUE; 

Теперь последовательности запросов должны работать нормально.

-121--2519091-

Убедитесь, что имя шифруемого элемента чувствительно к регистру. Поэтому следует использовать не «connectionstrings», а «conniceStrings».

1
ответ дан 1 December 2019 в 05:02
поделиться

Шифрование очень чувствительно к регистру, как сказал Махди. Я использовал в моем ПК и отнес его в раздел, где у меня была проблема, проблема была из контейнеров ключей RSA машины, которые хранятся в папке ИЛИ каталога моего ПК. и если вы хотите знать, где может быть начата коррекция перед тем, как делать какие-либо изменения, просто начните с

\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys.

Для информации, пожалуйста, повторите ссылку, которая может быть полезной.....

http://msdn.microsoft.com/en-us/library/ms998283.aspx

0
ответ дан 1 December 2019 в 05:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: