Как зашифровать свойство Jasypt.encryptor.pasword при использовании в файле конфигурации приложения реестра Jhipster

Я использую приложение реестра JHipster и использую локальное шифрование с помощью библиотеки Jasypt для шифрования имени пользователя и пароля из централизованной конфигурации для всех микросервисов.

При этом я заметил момент, когда я пытаюсь зашифровать имя пользователя и пароль по умолчанию (admin / admin), зашифрованные, как указано ниже, в папке central-config, я настроил gateway.yml (файл центральной конфигурации для все общие конфигурации микросервисов)

spring:
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
    url: jdbc:mysql://localhost:3306/gateway?useUnicode=true&characterEncoding=utf8&useSSL=false&useLegacyDatetimeCode=false&serverTimezone=UTC&createDatabaseIfNotExist=true
    **username: ENC(HLr1wJLGRZPuHVMUgEhiUQ==)
    password: ENC(HLr1wJLGRZPuHVMUgEhiUQ==)**
    hikari:
      poolName: Hikari
      auto-commit: false
      data-source-properties:
        cachePrepStmts: true
        prepStmtCacheSize: 250
        prepStmtCacheSqlLimit: 2048
        useServerPrepStmts: true

  jpa:
     database-platform: org.hibernate.dialect.MySQLInnoDBDialect
     database: MYSQL
     openInView: false
     show-sql: true
  liquibase:
      drop-first: true
      # Remove 'faker' if you do not want the sample data to be loaded automatically
      contexts: dev

eureka:
  instance:
    prefer-ip-address: true
  client:
    service-url:
      defaultZone: 
       # Jasypt Encryptor property================       
       http://**ENC(iNeA5NB8uu+MIXdPXBNzSw==):ENC(iNeA5NB8uu+MIXdPXBNzSw==)**@localhost:8761/eureka/

# ===========================================
# Jasypt Encryptor property
#============================================
jasypt:
  encryptor:
    password: jasyptkey

Я добавил необходимую зависимость к проекту приложения реестра также для конфигурации стартера весенней загрузки Jasypt-maven, как показано ниже, и он скомпилирован и вызывает реестр также отлично

 <dependency>
            <groupId>com.github.ulisesbocchio</groupId>
            <artifactId>jasypt-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>

Проблема, с которой я сталкиваюсь, заключается в том, что клиент обнаружения / клиенты облачного сервера конфигурации не могут распознать URI конечной точки.

Я также поделился файлом bootstrap.yml из приложения микросервиса (шлюза) для справки, если там чего-то не хватает.

Файл приложения micro-service bootstarp.yml выглядит следующим образом

spring:
  application:
    name: gateway
  profiles:
    active: dev
    include: composite
  cloud:
    config:
      fail-fast: false 
      uri: http://admin:${jhipster.registry.password}@localhost:8761/config/decrypt
      

      # name of the config server's property source (file.yml) that we want to use
      name: gateway
      profile: dev

Пожалуйста, предложите, что пошло не так при настройке или любой другой альтернативный способ сделать это, или он не поддерживает шифрование / дешифрование на основе Jasypt или что-то еще необходимо настроить?


person Debasish Chakraborty    schedule 13.08.2020    source источник
comment
Если я попытаюсь использовать JCE вместо библиотеки Jasypt, то с централизованной конфигурацией с использованием приложения реестра Jhipster, как клиенты микросервиса Jhipster могут получить доступ к зашифрованным свойствам собственной файловой системы, мне это не ясно. Любых простых изменений в файле bootstrap.yml приложения микросервиса будет достаточно для настройки, если да, то как?   -  person Debasish Chakraborty    schedule 14.08.2020


Ответы (1)


Я нашел решение проблемы. Единственное изменение, которое я сделал, - это передача библиотеки шифрования Jasypt, которую я пытался использовать с использованием традиционной стратегии шифрования / дешифрования Cloud Config Server приложения реестра JHipster. Для этого мне нужно было использовать любое обнаружение сервера Spring Cloud Config вместе с eureka. Итак, я, используя централизованную конфигурацию с использованием собственной файловой системы через папку central-config в приложении JHipster-Registry в boostrap.yml, я отключил свойство encrypt на сервере конфигурации Spring Cloud в конце приложения реестра, как это

spring:
  application:
    name: jhipster-registry
  profiles:
    active: dev
    include: composite
  cloud:
    config:
      server:

        #git:
         # uri: https://github.com/debjupiter18/central-config-server
          #skipSslValidation: true
        bootstrap: true
        **encrypt.enabled: false**

Включено то же самое в моем приложении шлюза микросервисов, как указано ниже.

jhipster:
  registry:
     password: '{cipher}a7b13e30356a50ed81275d9428a31543d7f59eb9e374f3063a94464e9f4a5863'

spring:
  application:
    name: gateway
  profiles:
    active: dev
    include: composite
    # The commented value for `active` can be replaced with valid Spring profiles to load.
    # Otherwise, it will be filled in by maven when building the JAR file
    # Either way, it can be overridden by `--spring.profiles.active` value passed in the commandline or `-Dspring.profiles.active` set in `JAVA_OPTS`
    #active: dev
  cloud:
    config:
      server.encrypt.enabled: true
      fail-fast: false # if not in "prod" profile, do not force to use Spring Cloud Config
      uri: http://admin:${jhipster.registry.password}@localhost:8761/config
      #http://admin:password@registry:8761/config/decrypt

      # name of the config server's property source (file.yml) that we want to use
      name: gateway
      profile: dev

В файле gateway.yml в папке central-config были изменены два свойства шифрования, как показано ниже, поскольку целью было создание прототипа для проверки возможности обнаружения клиента Eureka и подключения к базе данных MYSQL с этими изменениями. на месте.

spring:
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
    url: jdbc:mysql://localhost:3306/gateway?useUnicode=true&characterEncoding=utf8&useSSL=false&useLegacyDatetimeCode=false&serverTimezone=UTC&createDatabaseIfNotExist=true&allowPublicKeyRetrieval=true
    username: root #{cipher}7f21f461454b9c0d99f2f81194257b9b0f77787cfab738b690f73c1ee84a73c4    #ENC(HLr1wJLGRZPuHVMUgEhiUQ==)
    password: '{cipher}7f21f461454b9c0d99f2f81194257b9b0f77787cfab738b690f73c1ee84a73c4' #root
    hikari:
      poolName: Hikari
      auto-commit: false
      data-source-properties:
        cachePrepStmts: true
        prepStmtCacheSize: 250
        prepStmtCacheSqlLimit: 2048
        useServerPrepStmts: true

  jpa:
     database-platform: org.hibernate.dialect.MySQLInnoDBDialect
     database: MYSQL
     openInView: false
     show-sql: true
  liquibase:
      drop-first: true
      # Remove 'faker' if you do not want the sample data to be loaded automatically
      contexts: dev #, faker
# Property to disable logging in GAE since we cannot write to GAE file system
  mail:
    host: localhost
    port: 25
    username:
    password:
  messages:
      cache-duration: PT1S # 1 second, see the ISO 8601 standard
  thymeleaf:
      cache: false
  sleuth:
      sampler:
        probability: 1 # report 100% of traces
  zipkin: # Use the "zipkin" Maven profile to have the Spring Cloud Zipkin dependencies
      base-url: http://localhost:9411
      enabled: false
      locator:
        discovery:
          enabled: true
  security:
      basic.enabled: true
      user.name : admin
      user.password : '{cipher}a7b13e30356a50ed81275d9428a31543d7f59eb9e374f3063a94464e9f4a5863'
eureka:
  instance:
    prefer-ip-address: true
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@localhost:8761/eureka/

Последнее, но не менее важное, используемое свойство, упомянутое ниже в обоих файлах bootsrap.yml, в соответствии с принципом включения механизма шифрования на стороне сервера Config, а также для расшифровки того же свойства на стороне сервера. из-за того, что реестр JHipster действует как сервер Cloud Config, так и реестр Eureka.

encrypt:
  key: bXktc2VjcmV0LWtleS13aGljaC1zaG91bGQtYmUtY2hhbmdlZC1pbi1wcm9kdWN0aW9uLWFuZC1iZS1iYXNlNjQtZW5jb2RlZAo=
``` in both **bootstarp.yml** file to leverage the Spring cloud config server at JHipster-registry app side, to use the encryption at server side and decryption at client side .

I am able to run the centralized configuration with encryption and deryption, 
I stopped using Jasypt library for now. 
This is working for me, please let me know if any other suggestions or any downside of this solution, can discuss if anybody tried a different approach.
person Debasish Chakraborty    schedule 19.08.2020