svn шифрует / кеширует пароль пользователя вручную - PullRequest
0 голосов
/ 29 января 2019

Цель: избегать запроса аутентификации svn при запуске команд svn из командной строки.

Я знал, что есть возможность передать --username & --password в команду svn.Но я не хочу этого делать, потому что svn-операции выполняются из пакетного сценария, и я не хочу хранить пароль в пакетном сценарии.

Если мы создаем файл, который должен присутствовать в% APPDATA%\ Subversion \ auth \ svn.simple \ и обновите его содержимое.Выходит ли из запроса аутентификации.Возможно ли это сделать?

Я вижу, что есть инструмент для расшифровки пароля из файлов в svn.simple.Но как мне зашифровать пароль и создать файл с правильным именем хеша, чтобы svn использовал его?

1 Ответ

0 голосов
/ 08 февраля 2019

Решение найдено.Ниже описан процесс шифрования Subversion в Windows.

  1. Subversion использует функцию Windows CryptProtectData для шифрования пароля.
  2. Subversion выполняет шифрование base64 зашифрованного пароля исохраняется в% APPDATA% \ Subversion \ auth \ svn.simple \

Попытка с Powershell:

Не удалось автоматизировать с PowerShell, причина: CryptProtectData принимает параметр «описание», который входит в зашифрованный пароль.Но функция Powershell ProtectedData не принимает параметр «description».

В результате, если я использую Powershell «ProtectedData», размер зашифрованных данных будет небольшим по сравнению с шифрованием Subversion.

Решение:

Поэтому я использовал код c ++ для выполнения точно такой же операции с точно такой же строкой «description» из исходного кода Subversion для шифрования пароля и сделал base64кодирование зашифрованных данных, и это сработало.

# Below piece is taken from svn source code - file name: subversion/libsvn_subr/win32_crypto.c
CryptProtectData(
     &blobin, // Input Data BLOB
     L"auth_svn.simple.wincrypt",  // Description String
     NULL, NULL, NULL,                       
     CRYPTPROTECT_UI_FORBIDDEN,    // Constant to avoid prompting user
     &blobout                      // Output Data BLOB
 )

Примечание. Я постараюсь поделиться кодом в ближайшем будущем.

Дополнительные советы

CryptProtectData Функция создает сеансовый ключ для выполнения шифрования.Ключ сеанса извлекается снова, когда данные должны быть расшифрованы (я не стал более подробно рассказывать о том, какой именно ключ и как он хранится и т. Д.).Следовательно, мы должны выполнить шифрование с той же учетной записью пользователя, для которой запланированы операции svn.

Как упоминалось ранее, SVN кэширует детали в% APPDATA% \ Subversion \ auth \ svn.simple \ иимя файла: «MD5 хэш-значение svn: realmstring».

# you can find the svn realm string, if you have already cached in the your account
# Up to my observations it is <svn url> <standard text>
<https://testsvn.svn.com:443>  SVN AD-LDAP login (username, lowercase with domain)
...