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

#jhipster #spring-cloud-config #jhipster-registry #jhipster-gateway

#jhipster #spring-cloud-config #jhipster-registry #jhipster-gateway

Вопрос:

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

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

 spring:
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
    url: jdbc:mysql://localhost:3306/gateway?useUnicode=trueamp;characterEncoding=utf8amp;useSSL=falseamp;useLegacyDatetimeCode=falseamp;serverTimezone=UTCamp;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
  

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

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

Проблема, с которой я сталкиваюсь, заключается в том, что клиенты discovery client / cloud config server не могут распознать URI конечной точки.

Я также предоставил общий доступ к файлу bootstrap.yml из приложения micro-service (gateway) для справки, если там чего-то не хватает.

файл приложения 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 или что-то еще, что необходимо настроить?

Комментарии:

1. Если я попытаюсь использовать JCE вместо библиотеки Jasypt, то при централизованной конфигурации с использованием приложения Jhipster registry, каким образом клиенты микросервиса Jhipster могут получить доступ к зашифрованным свойствам собственной файловой системы, мне не ясно. Для настройки будет достаточно любых простых изменений в файле bootstrap.yml приложения-микросервиса, если да, то каким образом?

Ответ №1:

Я нашел решение проблемы. Единственное изменение, которое я внес, — это передав библиотеку шифрования Jasypt, я попытался использовать традиционную стратегию шифрования / дешифрования сервера JHipster registry app Cloud Config Server. Для этого мне пришлось использовать любое обнаружение сервера 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**
  

Включил то же самое в моем приложении micro-service gateway, как указано ниже

 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
  

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

 spring:
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
    url: jdbc:mysql://localhost:3306/gateway?useUnicode=trueamp;characterEncoding=utf8amp;useSSL=falseamp;useLegacyDatetimeCode=falseamp;serverTimezone=UTCamp;createDatabaseIfNotExist=trueamp;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, следуя принципу включения механизма шифрования на стороне сервера конфигурации и для облегчения расшифровки того же свойства на стороне сервера, это связано с тем, что JHipster registry действует как сервер облачной конфигурации, так и реестр 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.