Рубрики
Без рубрики

Сервер конфигурации Spring Cloud – Шифрование и дешифрование

При использовании сервера конфигурации Spring Cloud у нас также есть функция шифрования конфиденциальной информации… Помечено java, микросервисами, spring boot, springcloud.

При использовании сервера конфигурации Spring Cloud у нас также есть функция шифрования конфиденциальной информации, которая в противном случае хранится в виде обычного текста в нашем внешнем репозитории git. Это предотвращает доступ к конфиденциальной информации любого, у кого есть доступ на чтение к внешнему хранилищу, и настоятельно рекомендуется, если вы используете сервер конфигурации Spring Cloud. Примечание: Если вы еще не настроили сервер конфигурации Spring Cloud, ознакомьтесь с моей другой статьей о том, как настроить сервер конфигурации spring Cloud .

Предусмотрено 2 типа шифрования

  1. Симметричный – Быстрее настраивается и проще в использовании. Использует уникальный буквенно-цифровой набор символов как для шифрования, так и для дешифрования свойств.
  2. Асимметричный – Более высокий уровень безопасности и сложнее в настройке. Для этого требуется использовать утилиту командной строки Java под названием keytool, которая создает файл хранилища ключей (содержащий закрытый и открытый ключи). Шифрование выполняется с помощью открытого ключа, а закрытый ключ используется для расшифровки данных.

Предварительное условие – JCE

Если вы используете OpenJDK 11 вы можете пропустить этот шаг, так как JCE идет вместе с ним. Если вы используете Java 8, продолжайте и скачайте JCE, который нам понадобится для шифрования данных: https://www.oracle.com/in/java/technologies/javase-jce8-downloads.html Это включает в себя 2 банки, которые необходимо добавить в нашу среду выполнения: local_policy.jar и US_export_policy.jar Вы можете прочитать README и продолжить установку JCE. Все, что вам в основном нужно сделать, это перейти к пути установки JDK и поместить эти 2 банки в раздел lib/безопасность. После этого убедитесь, что вы закрыли все приложения java и снова открыли их. Если вы все еще видите ошибки при выполнении описанных ниже действий, попробуйте перезагрузить компьютер один раз.

1) Использование Симметричного Шифрования

Я настроил свой конфигурационный сервер, поэтому я могу отправить запрос на получение: http://localhost:8888/all-ms/default где all-ms – это имя микросервиса, а по умолчанию используется профиль spring для получения настроенных значений в моем внешнем репозитории git

1.1) Включить Асимметричное Шифрование

Чтобы включить шифрование, все, что вам нужно сделать, это добавить свойство в application.properties вашего сервера конфигурации.

encrypt.key=APODNU3093r2rbjzxcn09u213asdhy08WRFH

Вашим ключом может быть любая длинная случайная буквенно-цифровая строка.

1.2) Конечные точки для шифрования/дешифрования

Теперь давайте сначала зашифруем ваши данные. Запустите приложение spring boot сервера конфигурации и отправьте запрос HTTP POST на свой сервер с помощью endpoint/encrypt, а в теле отправьте данные, которые необходимо зашифровать. локальный хост: 8888/зашифровать Ответ будет содержать зашифрованное значение в теле. Вы также можете проверить описание, отправив HTTP-запрос post на localhost: 8888/расшифровать , на этот раз в теле должно быть зашифрованное значение. Чтобы использовать это шифрование в своем приложении, проверьте секретные данные, которые у вас есть в удаленном репозитории git. Это может быть пароль базы данных/токен. например, я буду использовать указанную выше конечную точку для шифрования этого.

1.3) Настройте свой репозиторий

Теперь в моем файле внешних свойств я заменю

 spring.datasource.password=DatabasePassword

с

spring.datasource.password={cipher}4ae0e7516ba2688519d46a09ec147a96badd9c9e34ffa5c778c26a9d608ad58d2cbfba7a38c87934692ceff4f2ca4bfc

Обратите внимание на префикс {шифр}, который сообщает вашему серверу, что для этого конкретного свойства необходимо выполнить расшифровку. В своем репо я использую токен JWT. Я зашифровал токен и установил значение в своем репозитории равным

token.secret={cipher}a0098f22f7fe1d0ca4dc0e03a95c9a721173b4486e9e51c9180c5afb3ff1a773dcba1fc3f4fcbc7060e7d93a8d312d1e

1.4) Проверьте это

Когда я проверяю свою конфигурацию, получая доступ к своим свойствам, она автоматически расшифровывает мой токен с учетом ключа шифрования на сервере конфигурации, даже если в моем внешнем хранилище я сохранил зашифрованное значение.

2) Асимметричное шифрование

Во-первых, нам нужно сгенерировать файл хранилища ключей, содержащий 2 ключа. Открытый ключ используется для шифрования информации, а закрытый ключ используется для расшифровки информации.

2.1 Создание файла хранилища ключей

В командной строке введите

keytool -genkeypair -alias myApiTutorialKey -keyalg RSA -dname "CN=Mark Dsouza,OU=MyApiDev,O=markbdsouza.com,L=Bangalore,S=KA,C=IN" -keypass a1b2c3d4 -keystore myApiTutorialKey.jks -storepass a1b2c3d4 

Здесь a1b2c3d4 – это пароль, а мой обучающий ключ Api.jks – созданный файл. Если вы не можете найти keytool при выполнении, перейдите в папку bin вашего JDK, и вы должны увидеть его там. Если вы используете Windows, убедитесь, что вы запускаете командную строку в режиме администратора, если у вас возникнут какие-либо проблемы. Пожалуйста, проверьте онлайн для получения более подробной информации о настройке этого https://docs.oracle.com/cd/E19683-01/806-4078/6jd6cjru7/index.html

2.2 Добавьте файл в свой проект

Теперь я помещаю этот файл в папку “Ресурсы”, чтобы легко получить доступ к этому файлу в моем приложении spring boot.

2.3 Включить Асимметричное Шифрование

Теперь для настройки в application.properties вашего сервера конфигурации spring cloud добавьте следующие свойства.

encrypt.keystore.location=classpath:key/myApiTutorialKey.jks
encrypt.keystore.password=a1b2c3d4
encrypt.keystore.alias=myApiTutorialKey

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

2.4 Конечные точки для шифрования/дешифрования

Запустите свое приложение и, аналогично симметричному способу работы, вы можете отправить запрос POST на localhost: 8888/encrypt, указав в теле значение, которое вы хотите зашифровать. Аналогично мы можем расшифровать, используя конечную точку расшифровки.

2.5 Настройте свой репозиторий

Чтобы зашифровать данные в нашем удаленном репозитории git, добавьте {cipher} в качестве префикса для свойства, чтобы сервер знал, что его необходимо расшифровать при извлечении.

2.6 Проверьте это

Когда я проверяю свою конфигурацию, получая доступ к своим свойствам, она автоматически расшифровывает мою собственность с помощью файла хранилища ключей.

И на этом все. Честно говоря, это очень короткий процесс шифрования ваших данных, и я надеюсь, что этот урок помог вам в вашем весеннем облачном путешествии!

Оригинал: “https://dev.to/markbdsouza/spring-cloud-config-server-encryption-and-decryption-2ejc”