Spring Cloud предоставляет разработчикам ряд инструментов для быстрого создания общих моделей распределенных систем. Например: управление конфигурацией, обнаружение услуг, вне маршрута, интеллектуальная маршрутизация, микроагенты, управляющие шины, одноразовые токены, глобальные замки, кампании принятия решений, распределенные сеансы, статус кластера и т. Д. Помощь распределенных систем требует большого количества моделей, а разработчики, использующие Spring Cloud, могут быстро создавать услуги и приложения, которые поддерживают эти шаблоны. Они будут подходить для любой распределенной среды, будь то персональный компьютер или производственная среда разработчика или облачная платформа.
характеристика
Spring Cloud фокусируется на предоставлении типичных решений и масштабируемых способов, которые хороши из коробки.
Введение
Асимметричное шифрование RSA обладает очень сильной безопасностью. HTTPS SSL Encryption использует этот метод для шифрования и передачи HTTPS -запросов. Поскольку алгоритм RSA включает в себя частный ключ и открытый ключ для шифрования и дешифрования, он называется асимметричным шифрованием. Частный ключ и открытый ключ совместимы, то есть те, которые зашифрованы с частным ключом, могут быть расшифрованы с помощью открытого ключа, а те, которые зашифрованы с помощью открытого ключа, можно расшифровать с помощью частного ключа. Традиционная односторонняя аутентификация использует только открытый ключ для шифрования, и только те, у кого есть закрытый ключ, могут расшифровать. Например, веб -сервер будет иметь пару частных ключей и общедоступных ключей. Клиент браузера сохраняет открытый ключ сервера. Когда клиент должен отправлять данные на сервер, он использует открытый ключ сервера для его шифрования. Затем, когда сервер получает данные, он использует закрытый ключ, чтобы расшифровать его. Когда клиент проверяет, является ли сервер реальным сервером, он сравнит открытый ключ, предоставленный сервером, с помощью общедоступного ключа, сохраненного локально. Только если это согласованно, может быть проверена подлинность сервера.
На нашем сервере конфигурации некоторые данные, которые имеют высокие требования к шифрованию, могут быть зашифрованы и расшифрованы с использованием алгоритма RSA.
Исходный код проекта
Gitee Code Cloud
Создать тестовый магазин ключей
Нам нужно использовать инструмент KeyTool, который поставляется с JDK для генерации хранилища ключей, который сохраняет информацию о закрытом ключе, и использовать следующую командную строку:
keytool -genkeypair -алис config -server -key -keyalg rsa -dname "cn = config server, ou = xuqian, o = my собственная компания, l = beijing, s = beijin
-keyStore Server.jks -StorePass changeit
Параметр -genkeypair генерирует пару общественных ключей и частных ключей.
-алис указывает псевдоним ключа, который используется для различения различных клавиш в одном и том же хранилище ключей.
-Keyalg указывает алгоритм для генерации клавиш, и здесь используется RSA по умолчанию
-dname Определяет общее имя, то есть CN, чтобы проверить идентичность ключа. Все элементы являются пользовательскими параметрами, OU - это название подразделения, O - это название организации, L - город, S - это провинция/штат, а C - страна
-Keypass -это пароль для ключа
-KeyStore -это имя файла хранилища ключей
-Storespass пароль для доступа к хранилищу ключа
Приведенный выше инструмент сохраняет сгенерированный закрытый ключ в магазине клавиш с именем Server.jks. Пока что мы сгенерировали только частные ключи. Spring Cloud Config Server будет генерировать открытый ключ, используя программу каждый раз на основе предоставленной нами информации. Обратитесь к исходному коду ниже.
org.springframework.security.rsa.crypto.keystorekeyfactory:
public Keypair getKeypair (string alias, char [] password) {try {synchronized (lock) {if (store == null) {synchronized (lock) {// Получить объект экземпляра хранилища ключа на основе адреса файла ключа и пароля, предоставленного Configururation = KeyStore.getinStance ("jks"); store.load (resource.getinputstream (), this.password); }}} // Получить закрытый ключ из магазина ключей на основе псевдонима и пароля, предоставленного конфигурацией rsaprivatecrtkey key = (rsaprivatecrtkey) store.getkey (псевдоним, пароль); // Определить правила генерации открытых ключей rsapublickeyspec spec = new rsapublickeyspec (key.getmodulus (), key.getpublicexponent ()); // генерировать открытый ключ PublicKey PublicKey = keyFactory.getInstance ("rsa"). GeneratePublic (spec); вернуть новую клавишу (publickey, key); } catch (Exception e) {бросить новое allodalStateException («Невозможно загрузить клавиши из магазина:" + resource, e); }}API безопасности Java используется здесь для работы на ключе. Смотрите примечания. Затем приведенная выше информация предоставляется через файл конфигурации Bootstrap.xml в ConfigServer:
Encrypt: #key: ThisismySecretKey Key Store: Местоположение: File: // $ {user.home} /development/keys/server.jks Пароль: изменение псевдоним: конфигурация-ключПоскольку мы не можем использовать как симметричное шифрование, так и асимметричное шифрование, мы комментируем конфигурацию Encrypt.Key и указываем параметры для асимметричного шифрования:
тест
Мы продолжаем шифровать тестовые данные, используя API Encrypt:
Curl http: // localhost: 8888/incrypt -d 23456789
Возвращает зашифрованные символы:
AQAPWOUOH4WVEXGGVV+BGTKC5E0D5ABA8VUKNZEXH27HYKSABW+WYZDWZTBK5QYFXPOCAS413RDENIDR2EZ44NKJT5V+438/ Vqexyszjzphp0xyxi9yiajqa3+ji+iwk8hrgtj4dzxikmitimcoirldzzzgdm/yklmuvh7larsnumxxgklpdbpkywdqhm57ob 6SB0IVM4H4ML1N4D3QUCUE7HH2F4AW4OLN7XUEYMKRPTTPY8OPNBEEZHRFMAL/AUVZQULU5JJMNJK9JIWOY+DSTSCVIY/MZ+D. ypv6f4afddvvog89snmpzcut+zmb8jxhdjloky+63rg326wffy9opuimw6/kcwzhv6vws55hqry713w6ydblrq/gyc3wils =
Затем протестируйте дешифрование
curl http: // localhost: 8888/decrypt -d AQAPWOUOH4+BGTKC5E0D5ABA8VUKNZEXH27HYKSABW+WYZDWZTBK5QYFXPOCAS413RDEIDR2EZ44NKJT5V+438/VQEXYS zjzphp0xyxi9yiajqa3+ji+iwk8hrgtj4dzxikmitimcoirldzzzgdm/yklmuvh7larsnumxxgklpdbpkywdqhm5ob6sb0 IVM4H4ML1N4D3QUCUE7HH2F4AW4OLN7XUEYMKRPTTPY8OPNBEEZHRFMAL/AUVZQULU5JJMNJK9JIWOY+DSTSCVIY/MZ+DYP v6f4afddvvog89snmpzcut+zmb8jxhdjloky+63rg326wffy9opuimw6/kcwzhv6vws55hqry713w6ydblrq/gyc3wils =
Вернется
23456789
Мы также можем изменить web-client.yml для проверки:
#Test: #Password: '{chipher} 94C1027141ADD984447F0BE13CAEBB6B38ED1DCF99811B1A5CD2B874C64407'USER: Пароль: Пароль: Пароль: Пароль: Пароль: Пароль: Пароль: Пароль: Пароль: Пароль: Пароль: Пароль: Пароль: Пароль: Пароль: Пароль: '{cipher} aqapwouoh4wvexggvv+bgtkc5e0d5aba8vuknzexh27hyksabw+wyzdwztbk5qyfxpocas413rdenidr2ez44nkjt5 V+438/vqexyszjzphp0xyxi9yiajqa3+ji+iwk8hrgtj4dzxikmitimcoirldzzgdm/yklmuvh7larsnumxxgklpdbpkywdqhm 57ob6sb0ivm4h4ml1n4d3qucue7hh2f4aw4oln7xueyMkrpttpy8opnbeezhrfmal/auvzqulu5jjmnjk9jiwoy+dstscviy/mz +dypv6f4afddvvog89snmpzcut+zmb8jxhdjloky+63rg326wffy9opuimw6/kcwzhv6vws55hqry713w6ydblrq/gyc3wils = 'Комментарий test.password и добавьте новый user.password для использования зашифрованного значения конфигурации. Затем отправьте репозиторий Gitee и обратитесь к этому файлу конфигурации через URL:
http: // localhost: 8888/web-client/default
Получены следующие результаты:
{"name": "web-client", "профили": ["по умолчанию"], "лейбл": null, "версия": "3044a5345fb86d09a043ca7404b9e57c8c13c512", "Состояние": NULL, "PropectySources": ["womi" "https://gitee.com/zxuqian/spring-cloud-config-remote/web-client.yml", "Источник": {"Сообщение": "Это сообщение происходит из репозитория удаленной конфигурации", "Management.endpoints.web.exposture.include": "*", "user.pass.:" 23477779 "?Суммировать
Выше приведено введение RSA Spring Cloud Config и метод использования RSA для шифрования файлов конфигурации, которые редактор представил вам. Я надеюсь, что это будет полезно для вас. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит вам вовремя. Большое спасибо за вашу поддержку сайту wulin.com!