#passwords #websphere #encode
#пароли #websphere #кодировать
Вопрос:
Я пытаюсь защитить образ Liberty 20.0.0.3 docker и не могу получить кодированный пароль для работы источника данных. Обычный текстовый пароль работает нормально.
Вот что я пробовал до сих пор:
securityUtility encode --encoding=aes mypa$$word
{aes}ADPrOj1GfH/9Am3TSqT7MLN0 sRPkXHUAy7RIk dbRmZR0fEQTEkzHv1lDTnGhGeaA==
В моей конфигурации источника данных у меня:
<dataSource id="DS1" jndiName="jdbc/DS1" transactional="true">
<jdbcDriver libraryRef="MSSQL"/>
<properties.microsoft.sqlserver serverName="myserver" instanceName="myinstance" databaseName="mydatabase" user="myuser" password="{aes}ADPrOj1GfH/9Am3TSqT7MLN0 sRPkXHUAy7RIk dbRmZR0fEQTEkzHv1lDTnGhGeaA==" />
</dataSource>
что дает:
### Cause: java.sql.SQLException: Login failed for user 'myuser'. ClientConnectionId:d521779d-9316-4adf-ab61-9118cf66a940 DSRA0010E: SQL State = S0001, Error Code = 18,456
Затем я изменил конфигурацию на эту:
<dataSource id="DS1" jndiName="jdbc/DS1" transactional="true">
<jdbcDriver libraryRef="MSSQL"/>
<containerAuthData user="myuser" password="{aes}ADPrOj1GfH/9Am3TSqT7MLN0 sRPkXHUAy7RIk dbRmZR0fEQTEkzHv1lDTnGhGeaA==" />
<properties.microsoft.sqlserver serverName="myserver" instanceName="myinstance" databaseName="mydatabase" />
</dataSource>
и я получаю
### Cause: java.sql.SQLException: Login failed for user ''. ClientConnectionId:34a029da-e38a-4d54-a943-9c975009ccba DSRA0010E: SQL State = S0001, Error Code = 18,456
Наконец, я попытался перенести пароль в bootstrap.properties и использовать в качестве свойства
bootstrap.properties
pwd={aes}ADPrOj1GfH/9Am3TSqT7MLN0 sRPkXHUAy7RIk dbRmZR0fEQTEkzHv1lDTnGhGeaA==
<dataSource id="DS1" jndiName="jdbc/DS1" transactional="true">
<jdbcDriver libraryRef="MSSQL"/>
<properties.microsoft.sqlserver serverName="myserver" instanceName="myinstance" databaseName="mydatabase" user="myuser" password="${pwd}" />
</dataSource>
### Cause: java.sql.SQLException: Login failed for user 'myuser'. ClientConnectionId:d521779d-9316-4adf-ab61-9118cf66a940 DSRA0010E: SQL State = S0001, Error Code = 18,456
Я запускаю команду securityUtility в контейнере docker, поэтому не должно быть никаких различий в ОС, которые могли бы вызвать проблему. Мой фактический пароль содержит символ $, хотя, может ли это отбросить его? Я также прочитал, что необходимо проверить совместимость с кодовой страницей, как мне это сделать на терминале docker image?
Комментарии:
1. Работают ли более простые формы кодирования, такие как XOR? Кроме того, при использовании шифрования AES необходимо установить ключ шифрования AES в вашем server.xml вот так:
<variable name="wlp.password.encryption.key" value="yourKey" />
смотрите эту страницу для получения более подробной информации: ibm.com/support/knowledgecenter/en/SSEQTP_liberty /…2. Спасибо за ответ, Энди. К сожалению, нет, тоже пробовал xor, и там тоже никакой радости. Я также пытался использовать ключ, а не полагаться на значение по умолчанию, сгенерированное контейнером, и сохранять в server.xml и bootstrap.properties, но опять безрезультатно.
Ответ №1:
Согласно этому документу центра знаний для команды securityUtility, некоторые операционные системы требуют одинарных кавычек вокруг предоставленных аргументов. Я заметил, что если я попробую выполнить следующее на Mac,
./securityUtility encode --encoding=aes mypa$$word
против
./securityUtility encode --encoding=aes 'mypa$$word'
они генерируют разные выходные данные.
И, кроме того, когда я их декодирую,
первый декодирует в:
mypa15652word
в то время как последний декодирует в
mypa$$word
Если вам интересно, откуда берется 15652, если я запущу
echo $$
из командной строки Mac я возвращаю 15652, который выглядит как текущий идентификатор процесса.
Попробуйте добавить одинарные кавычки при кодировании пароля и посмотрите, поможет ли это.
Комментарии:
1. Приветствую njr! Поскольку в моем пароле был символ $, сгенерированная кодированная строка была неверной. Благодаря добавлению одинарных кавычек пароль удалось правильно расшифровать.