Пользовательское шифрование паролей JBoss DataSorurce?

Я работаю с JBoss 4.2.1GA.

Как и вы, возможно, теперь есть способ избежать пароля JBoss DataSoruce в виде простого текста. Однако этот метод имеет фундаментальный недостаток безопасности, который становится очевидным, если вы посмотрите, как org.jboss.resource.security.SecureIdentityLoginModule реализованы методы decode и encode. Шифрование в основном представляет собой обычную иглобрюхую рыбу с использованием фиксированного секретного ключа (jaas is the way).

Я ищу способ либо изменить фиксированный секретный ключ на тот, который я выбираю, либо изменить способ шифрования/дешифрования.

Я склонен думать, что это можно сделать путем повторной реализации SecureIdentityLoginModule, что нормально, но мне трудно поверить, что для этого нет готового варианта (пока я не нашел)

Кто-нибудь делал что-то подобное?


person Chepech    schedule 21.03.2012    source источник
comment
См. также stackoverflow.com/questions/848734/   -  person Heiko Rupp    schedule 21.03.2012


Ответы (3)


Для этой проблемы существует заявка об ошибке, по крайней мере, для JBoss 4.0.x: https://issues.jboss.org/browse/JBAS-4460

Обратите внимание на комментарий:

Пароль «зашифровать базу данных» предназначен для прохождения глупых проверок безопасности. В конечном итоге где-то будет какой-то пароль, потому что системе необходимо расшифровать пароль, чтобы отправить его в базу данных. Относительно опытному программисту всегда будет легко взломать это. Безопасность файловой системы/ОС + безопасность транспорта — ваша единственная надежда.

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

person atrain    schedule 21.03.2012

Взгляните на следующий документ вики. Он описывает два способа шифрования паролей JBoss. Первый — это то, что вы описали, а второй — шифрование на основе пароля.

person uaarkoti    schedule 21.03.2012
comment
Да, я видел это в руководстве JBoss. Швы, которые он просто служит для запутывания. Похоже, вы заканчиваете там, где начали, где-то есть вещи в виде простого текста. Я это предвидел =D, большое спасибо! - person Chepech; 21.03.2012

Хорошо, вот как я это сделал (я работаю над JBOSS 4.2.1 GA и Oracle, поэтому некоторые вещи могут различаться между версиями и поставщиками БД):

Вам необходимо расширить AbstractPasswordCredentialLoginModule.

Я основывал свой (под названием PGPLoginModule) на готовой реализации под названием SecureIdentityLoginModule единственная разница между этим и моим заключается в методах декодирования и кодирования, которые используют другой алгоритм и процесс шифрования (мой использует сертификат PGP для дешифрования файл свойств, в котором хранится пароль) аналогично тому, что описано в эту статью, но вы можете использовать любой удобный для вас метод.

Вам потребуется добавить следующие jar-файлы, расположенные в папках библиотеки jboss, чтобы разрешить зависимости:

  • [JBOSS_HOME]/lib/jboss-common.jar
  • [JBOSS_HOME]/lib/jboss-jmx.jar
  • [JBOSS_HOME]/server/default/lib/jbosssx.jar
  • [JBOSS_HOME]/server/default/lib/jboss-jca.jar

Вам нужно разархивировать свой класс и поместить банку либо на:

  • [JBOSS_HOME]/сервер/по умолчанию/библиотека

or

  • [JBOSS_HOME]/библиотека

Когда у вас есть это, вам нужно настроить его в домене безопасности, который вы определили в файле login-config.xml jboss, чтобы он использовал ваш класс (мой — org.company.resource.security.PGPLoginModule) вместо используя значение по умолчанию, поэтому оно будет выглядеть примерно так:

<application-policy name="PGPDomain">
        <authentication>
            <login-module code="org.company.resource.security.PGPLoginModule" flag="required">
                <module-option name="username">[DB_USER]</module-option>
                <module-option name="password">[ENCTRYPTED_PASSWORD]</module-option>
                <module-option name="managedConnectionFactoryName">jboss.jca:service=LocalTxCM,name=OracleDS</module-option>
            </login-module>
        </authentication>
    </application-policy>

Обратите внимание, что в зависимости от силы и алгоритма, который вы решите использовать, вам может потребоваться установить файл Файлы политик неограниченной надежности Java Cryptography Extension в вашу JRE.

Я надеюсь, что кто-то найдет это полезным.

person Chepech    schedule 23.03.2012
comment
Я пытаюсь расширить AbstractPasswordCredentialLoginModule и настроить его, как вы предложили. Но я получаю следующую ошибку: 11:58:50,251 ERROR [ExceptionUtil] org.jboss.jms.server.plugin.JDBCJMSUserManagerService@3cf28f60 startService java.lang.SecurityException: Unauthenticated caller:null Любая идея, если я что-то упустил? - person Ravi Rao; 14.01.2013
comment
Вы делаете это на той же версии JBoss, что и я? - person Chepech; 20.01.2013
comment
Я делаю это на JBoss 5.1.0.GA. Мне удалось заставить это работать с несколькими изменениями. Мне пришлось реализовать некоторые классы, такие как Action, которые были только локальными для пакета. - person Ravi Rao; 04.04.2013