Пароль источника данных в кодировке Liberty не работает

#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! Поскольку в моем пароле был символ $, сгенерированная кодированная строка была неверной. Благодаря добавлению одинарных кавычек пароль удалось правильно расшифровать.