#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.