2016-05-09 2 views
0

В настоящее время у меня есть три приложения Java, которые я хочу зашифровать паролями DB. Для моего первого приложения следующий синтаксис для jasypt работает. У меня есть зашифрованный пароль, и он может войти в db без проблем. Тем не менее, мои другие два приложения не работают с неправильной ошибкой пароля пользователя. Мой главный вопрос: есть ли способ отладить jasypt, чтобы я мог увидеть, пыталась ли он расшифровать пароль, указанный ниже? Я предполагаю, что дешифрование терпит неудачу и пытается войти в систему, используя зашифрованный пароль. Если я изменю файл persistence.xml на незашифрованный пароль, он будет работать нормально. Спасибо за любые мысли, которые могут быть у любого!Как отладить jasypt

Вот мои файлы:

jasypt пароль поколения:

c:\jasypt-1.9.2\bin\encrypt input=mydbpassword password=password algorithm=PBEWithMD5AndTripleDES 
----ENVIRONMENT---------------- 

Runtime: Oracle Corporation Java HotSpot(TM) 64-Bit Server VM 24.45-b08 

-----ARGUMENTS----------------- 
input: mydbpassword 
password: password 
algorithm: PBEWithMD5AndTripleDES 

------OUTPUT------------------- 
h+RqHWpovo5q390ID9+dTTs/9k0bmwlI 

persistence.xml

<persistence-unit name="localDB" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <properties> 
    <property name="connection.provider_class" value="org.jasypt.hibernate.connectionprovider.EncryptedPasswordDriverManagerConnectionProvider" /> 
    <property name="connection.encryptor_registered_name" value="strongHibernateStringEncryptor" /> 
    <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" /> 
    <property name="hibernate.connection.driver_class" value="oracle.jdbc.driver.OracleDriver" /> 
    <!-- DEV --> 
    <property name="hibernate.connection.url" value="jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=foo.com)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SID=db2)))" /> 
    <property name="hibernate.connection.username" value="db2" /> 
    <property name="hibernate.connection.password" value="ENC(h+RqHWpovo5q390ID9+dTTs/9k0bmwlI)" /> 

весна фасоли:

<bean id="hibernateStringEncryptor" class="org.jasypt.hibernate3.encryptor.HibernatePBEStringEncryptor"> 
    <property name="registeredName"> 
     <value>strongHibernateStringEncryptor</value> 
    </property> 
    <property name="algorithm"> 
     <value>PBEWithMD5AndTripleDES</value> 
    </property> 
    <property name="password> 
     <value>password</value> 
    </property> 
</bean> 

Ошибка я получил, когда я раскрываю a pp:

2016-05-09 16:37:29,149 INFO [STDOUT] INFO [DriverManagerConnectionProvider] using driver: oracle.jdbc.driver.OracleDriver at URL: jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=foo.com)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SID=db2))) 
2016-05-09 16:37:29,149 INFO [STDOUT] INFO [DriverManagerConnectionProvider] connection properties: {user=db2, password=****,autocommit=true,release_mode=auto} 
2016-05-09 16:37:29,149 INFO [STDOUT] WARN [SettingsFactory] Could not obtain conection metadata java.sql.SQLException: ORA-01017: Invalid username/password; logon denied 

ответ

0

Я полагаю, вы решили это сделать. Но вы просили «... любые мысли, которые могли бы иметь люди!» В случае, если кто-то другой имеет ту же проблему, вот несколько советов.

  • Прикрепите исходный код jasypt и отследите его, когда он генерирует исключение, связанное с неудачной аутентификацией. Найдите раздел, где пароль декодируется.
    Если буфер пуст, вы поймете, что он не может найти пароль.

  • Вместо того, раскрывая зашифрованный Oracle пароль открытого текста в persistence.xml, вы можете ввести в среду выполнения, которая jasypt будет использовать для расшифровки зашифрованного пароля Oracle вашего расшифровки пароля («Password1») («password2») хранится в файле свойств, установленного на пути к классам:

    password2=ENC(h+RqHWpovo5q390ID9+dTTs/9k0bmwlI)

Обратите внимание, что jasypt может очистить расшифрованный пароль из памяти после расшифровки.

См: org.jasypt.spring31.properties.EncryptablePropertyPlaceholderConfigurer

... который читает зашифрованный Oracle password2 из файла свойств, передает его в jasypt декриптор боб, который использует окр уаг $ {Password1} для декодирования password2, размещая расшифрованный результат в окр вар $ {password2}, которая затем может быть использована в persistence.xml:

<property name="hibernate.connection.password" value="${password2}" />

Так, password2 начинает зашифрованы в файле свойств, и заканчивается расшифрованы в окр вар $ {password2}.

Вам также необходимо org.jasypt.encryption.pbe.StandardPBEStringEncryptor и org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig который объявляет алгоритм и имя переменной среды, содержащей расшифровке пароль («Password1»).

схема подробно описана здесь: Encrypting Properties With Jasypt

Jasypt Documentation

После того, как вы думаете, что все это работает, вы должны найти в журнале: EncryptablePropertyPlaceholderConfigurer -Loading properties file from class path resource [your.file.properties]

Вы можете разбить его доказать концепцию, добавив один символ в пароль1. Перезапустите приложение, и в журнале вы должны найти:

EncryptablePropertyPlaceholderConfigurer -Loading properties file from class path resource [your.file.properties]

Тогда EncryptionOperationNotPossibleException.

Сбросить пароль1 к тому, каким он должен быть и перезапустить. Расшифровка должна работать снова.

Смежные вопросы